मुझे एक कस्टम घटक के साथ समस्याएं आ रही हैं जिसमें मैं लिख रहा हूं कि यह किसी नेस्टेड नियंत्रण प्रदान नहीं करेगा। घटक एक साधारण लेआउट नियंत्रण है, जो एक्सटेंशन लाइब्रेरी में एप्लिकेशनलाउट नियंत्रण से बहुत कम अनुकूलित है। XPage कोड इस तरह दिखता है:कस्टम घटक नेस्टेड घटकों को प्रदर्शित नहीं करेगा
<px:exampleControl id="exampleControl1">
<xp:span styleClass="mySpan">Inner Text</xp:span>
</px:exampleControl>
उदाहरण नियंत्रण नियंत्रण प्रदान करेगा लेकिन घोंसला वाला स्पैन नहीं होगा। मेरे बुनियादी रेंडरर कोड है:
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");
}
}
मैं भी एक विशेष समारोह प्रस्तुत करना एक्सटेंशन लाइब्रेरी दाता (AbstractApplicationLayoutRenderer.java में उपयोगिता कार्यों), लेकिन component.getChildCount() हमेशा 0.
रिटर्न से उधार का उपयोग करने का प्रयास कियातो घोंसला वाले नियंत्रण क्यों नहीं हैं और मुझे क्या याद आ रही है?
क्या आपने Renderer.encodeChildren को देखा था? AFAIK यह कुछ भी नहीं करता है - यही कारण है कि आपको इसे ओवरराइट करने की आवश्यकता है, इसलिए "सुपर" पर कॉल कुछ भी नहीं करता है। कम से कम आपको rendersChildren [true] को सेट करने की आवश्यकता है (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