मैं एक जेएसएफ 2/प्राइमफेस ऐप विकसित कर रहा हूं और मुझे इस घटक के बैकिंग बीन में एक समग्र घटक के इंटरफ़ेस में परिभाषित विशेषताओं तक पहुंचने में समस्या हो रही है। इस प्रकारबैकिंग घटक में जेएसएफ 2 समग्र घटक विशेषताओं तक पहुंच
मेरे घटक परिभाषित किया गया है: application/src/main/webapp/resources/my_component
निर्देशिका:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:composite="http://java.sun.com/jsf/composite">
<composite:interface componentType="testComponent">
<composite:attribute name="text" required="true" type="java.lang.String" />
</composite:interface>
<composite:implementation>
<h:outputText value="Passed text is: #{cc.attrs.text}" />
</composite:implementation>
</html>
यह text.xhtml
कहा जाता है में स्थित एक फ़ाइल में संग्रहीत किया जाता है।
मैं बहुत की तरह एक और पेज (जो एक Facelets रचना तत्व है) पर इस घटक का उपयोग करें:
package my.application.component;
import javax.faces.component.FacesComponent;
import javax.faces.component.UINamingContainer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@FacesComponent (value="testComponent")
public class TestComponent extends UINamingContainer {
Logger log = LoggerFactory.getLogger(TestComponent.class);
public TestComponent() {
log.debug("TestComponent constructor");
log.debug("getAttributes().size(): " + getAttributes().size());
}
}
घटक खुद के रूप में काम करता है:
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:myc="http://java.sun.com/jsf/composite/my_component"
template="./resources/templates/template.xhtml">
<ui:define name="content">
<h:form id="products">
<myc:test id="test" text="A text" />
</h:form>
</ui:define>
</ui:composition>
समर्थन घटक वर्ग इस प्रकार परिभाषित किया गया है अपेक्षित होना। उपयोग पृष्ठ Passed text is: A text
आउटपुट प्रस्तुत करता है। इसके अलावा, लॉगर आउटपुट TestComponent
कन्स्ट्रक्टर से लॉग संदेश प्रदर्शित करता है, इसलिए ऐसा लगता है कि घटक xml परिभाषा TestComponent
कक्षा के साथ सही ढंग से बाध्य है।
अब, समस्या कि getAttributes()
विधि हमेशा TestComponent
निर्माता में लागू एक शून्य आकार नक्शा देता है। यदि मैं यह सही ढंग से समझ, मैं text
विशेषता एक फोन का उपयोग कर घटक के इंटरफ़ेस में घोषित उपयोग करने में सक्षम होना चाहिए:
getAttributes().get("text");
TestComponent
कक्षा में
, लेकिन यह हमेशा null
रिटर्न के रूप में विशेषताओं नक्शा खाली है।
मैं भी एक फोन का उपयोग कर text
विशेषता पहुँचने का प्रयास किया:
String text = FacesContext.getCurrentInstance().getApplication(). evaluateExpressionGet(FacesContext.getCurrentInstance(), "#{cc.attrs.text}", String.class));
लेकिन यह भी null
को हल करता है।
मैं क्या गलत कर रहा हूं? किसी भी सुझाव की बहुत सराहना की जाएगी क्योंकि मुझे नहीं पता कि आगे क्या प्रयास करना है।
/तुकाज़।
हाय माइक। धन्यवाद। मैं इसे आज़मा दूंगा और जांच करूंगा कि गुण 'एनकोड' विधि में पहुंच योग्य हैं या नहीं। –
हाय फिर से। हाँ। गुण 'एन्कोड [ऑल | शुरुआत | अंत | चाइल्डन] (फेसस्टेन्टेक्स्ट संदर्भ)' विधियों में उपलब्ध हैं। मदद के लिए बहुत - बहुत धन्यवाद। लेकिन मुझे अभी भी आश्चर्य है कि यदि इनमें से एक तरीका गुणों तक पहुंचने का सही स्थान है, तो मैं अपने घटक को प्रस्तुत करने से पहले किसी भी तरह से उनका उपयोग करना चाहता हूं। इस तरह के उद्देश्य के लिए '@ प्रबंधित बीन 'में मैं @ पोस्ट पोस्टस्ट्रक्चर विधियों का उपयोग करता हूं, लेकिन ऐसा लगता है कि यह' @ फेस कॉम्पोनेंट 'कक्षा में काम नहीं करता है। –
शायद किसी के लिए अनुरोध दर्ज करना चाहिए? '@ फेस कॉन्स्टेंट' में '@ पोस्टकॉन्स्ट्रक्चर' बहुत अच्छा होगा! –