2010-05-17 16 views
11

मैं JSF 2 में एक सरल menuing समग्र घटक बना रहा हूं लेकिन, मैं < घंटा की कार्रवाई विशेषता में उपयोग करने के लिए समग्र घटक में एक स्ट्रिंग विशेषता पास नहीं कर पा रहा हूँ। मेरे घटक की तरह दिखता है:एक जेएसएफ 2 समग्र घटक में एक्शन स्ट्रिंग कैसे पास करें? commandLink >:

<composite:interface> 
    <composite:attribute name="title" required="true" type="java.lang.String"/> 
    <composite:attribute name="view" required="true" /> 
</composite:interface> 

<!--implementation--> 
<composite:implementation> 
    <li><h:commandLink action="#{cc.attrs.view}" value="#{cc.attrs.title}" /></li> 
</composite:implementation> 

मैं कैसे < घंटा की कार्रवाई विशेषता में एक कार्रवाई स्ट्रिंग प्राप्त कर सकते हैं: commandLink >?

<composite:attribute name="view" method-signature="java.lang.String f()"/> 

या वैकल्पिक रूप से, कुछ विशेषता नाम JSF में विशेष रूप से नियंत्रित किया जाता है:

उत्तर

23

ऐसा लगता है कि इस Horstmanns को आकर्षित करती है :-)

आप विशेषता "कार्रवाई" नाम और पुनर्लक्ष्यीकरण उपयोग करना चाहिए। फिर उस में कुछ विशेष हैंडलिंग किक

http://docs.oracle.com/javaee/6/javaserverfaces/2.0/docs/pdldocs/facelets/composite/attribute.html

और ViewDeclarationLanguage.retargetMethodExpressions (नहीं ViewHandler) जिसका लिंक मैं में पेस्ट करने की अनुमति नहीं कर रहा हूँ के एपीआई डॉक पर अति सुंदर स्पष्टता (नहीं) के साथ वर्णन किया गया है।

यहां आप यह कैसे करते हैं।

<composite:interface> 
    <composite:attribute name="title" required="true" type="java.lang.String"/> 
    <composite:attribute name="action" targets="view" required="true" /> 
</composite:interface> 

<!--implementation--> 
<composite:implementation> 
    <li><h:commandLink id="view" value="#{cc.attrs.title}" /></li> 
</composite:implementation> 
+3

यह सही है, धन्यवाद के - यह आपके लिए एक विशेषज्ञ है जो आपके जैसे स्टैक ओवरफ्लो समुदाय में शामिल हो! –

+0

हमेशा अपने खेल के शीर्ष पर, के;) धन्यवाद! – Lincoln

1

आप इस प्रकार का विधि के लिए विशेषता के प्रकार को परिभाषित करने की जरूरत है। इसलिए यदि आप अपने विशेषता "कार्रवाई" नाम यह भी विधि-हस्ताक्षर के बिना काम करना चाहिए:

<composite:attribute name="action"/> 

संपादित करें: मैं शायद एक कार्रवाई आपको बुला बिना सवाल, यदि आप एक दृश्य आईडी से लिंक करना चाहते गलत समझा h:commandLink के बजाय h:link टैग का उपयोग कर सकते हैं:

<h:link outcome="#{cc.attrs.view}" value="#{cc.attrs.title}"/> 
+0

इन दोनों एक "ClassCastException: java.lang.String javax.el.ValueExpression में ढाला नहीं जा सकता है" दे जब एक स्ट्रिंग दृश्य (या कार्रवाई) के रूप में पारित कर दिया है। –

+0

धन्यवाद, फिर से, लेकिन जो मैं लक्ष्य कर रहा हूं वह एक समग्र घटक का निर्माण कर रहा है जो एक मूल घटक की तरह व्यवहार करता है, जिससे यह स्ट्रिंग या एक्शन एट्रिब्यूट के मान के रूप में एक विधि ले सकता है। शायद यह समग्र घटक templating के साथ संभव नहीं है, और शायद यह प्राप्त करने के लिए पूर्ण घटक एपीआई आवश्यक है। –

+0

दूसरे विचार पर, आपने < एच के बारे में मेरे प्रश्न का उत्तर दिया: लिंक >। मैं एक घटक बनाने के बारे में एक नया प्रश्न पोस्ट करूंगा जो देशी घटक की तरह व्यवहार करता है। –

संबंधित मुद्दे