Ich habe Probleme mit einer benutzerdefinierten Komponente, die ich schreibe, dass es keine verschachtelten Steuerelemente rendern wird. Die Komponente ist eine einfache Layoutsteuerung, die sehr lose von dem ApplicationLayout-Steuerelement in der Erweiterungsbibliothek angepasst wird. Der XPage Code sieht wie folgt aus:Benutzerdefinierte Komponente zeigt verschachtelte Komponenten nicht
<px:exampleControl id="exampleControl1">
<xp:span styleClass="mySpan">Inner Text</xp:span>
</px:exampleControl>
Die exampleControl machen wird gut, aber die verschachtelte Spanne nicht. Mein Grund Renderer-Code ist:
public class ExampleRenderer extends Renderer {
@Override
public void encodeBegin(FacesContext context, UIComponent component)
throws IOException {
ResponseWriter writer = context.getResponseWriter();
writer.startElement("div", component);
writer.writeAttribute("class", "custom-banner", null);
writer.endElement("div");
writer.startElement("div", component);
writer.writeAttribute("class", "main-body", null);
}
@Override
public boolean getRendersChildren() {
return true;
}
@Override
public void encodeChildren(FacesContext context, UIComponent component) {
try {
super.encodeChildren(context, component);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void encodeEnd(FacesContext context, UIComponent component)
throws IOException {
ResponseWriter writer = context.getResponseWriter();
writer.endElement("div");
writer.startElement("div", component);
writer.writeAttribute("class", "custom-footer", null);
writer.endElement("div");
}
}
Ich habe sogar eine bestimmte Render-Funktion entlehnt aus der Extension Library Renderer (die Utility-Funktionen in AbstractApplicationLayoutRenderer.java) aber component.getChildCount() zu verwenden, versucht immer 0 zurück
Warum also nicht die verschachtelten Steuerelemente Rendering und was fehlt mir?
Haben Sie Renderer.encodeChildren überprüft? AFAIK es tut nichts - deshalb musst du es überschreiben, damit der Aufruf von "super" nichts macht. Zumindest müssen Sie rendernChildren [auf true] setzen (http://docs.oracle.com/cd/E17802_01/j2ee/j2ee/javaserverfaces/1.1_01/docs/api/javax/faces/render/Renderer.html#encodeChildren % 28javax.faces.context.FacesContext,% 20javax.faces.component.UIComponent% 29) – stwissel