Hi Josh,
thanks.
As you suggested I defined a special-fixed-component-id for the
component and I checked before its rendering (during its own
SetupRender) if that id was already present
in the document (writer.getDocument().getElementById()). If so I just
skipped the render (by returning False) and everything is fine.
However, this solution will not scale easily for different constraints.
Assume for example that you want to force one of the following
constraints in the page (not all of them may have real use cases):
- N and only N components of the same type, N > 1
- No components of type X
I guess you can always work with the Document object and look for some
IDs (maybe a programmatic way to do that will scale better).
Moreover, I noticed that apparently the Document object
(writer.getDocument()) provides only two methods to retrieve elements:
Element find(String path) [Finds an element based on a path of
element names.]
Element getElementById(String id) [Tries to find an element in
this document whose id is specified.]
and both of them assume that you know precisely what you are looking
for, and they cannot use of regexp or similar to specify the id and
path params.
BTW (maybe OT)
Can you render a component inside a page or another component that has
no template at all?
Something like this.
Container Component Class{
private ContainedComponent myComponent;
@BeginRender
public void render(MarkupWriter markupWriter){
markupWriter.render( myComponent );
}
}
I tried adding the @Component annotation and returning the object in
the different rendering methods, but it didn't work.
Thanks again.
-- Alessio