2011-10-18 17 views
6

पर क्रिया विधियों को जोड़ना मैं जेएसएफ 2.0 के साथ समग्र घटकों के बारे में सीख रहा हूं और मैं चाहता हूं कि मेरा घटक बैकिंग बीन्स से विधियों को ट्रिगर करने में सक्षम हो, इसलिए मैंने एक साधारण उदाहरण बनाया, लेकिन कुछ गलत है।एक समग्र घटक

<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> 
     <composite:attribute name="attribute1"/> 
     <composite:attribute name="attribute2"/> 
     <composite:attribute name="actionBtnText"/> 
     <composite:attribute name="actionMethod" method-signature="java.lang.String action()"/> 
</composite:interface> 

<composite:implementation> 
    <h:form> 
      <h:inputText value="#{cc.attrs.attribute1}"/> 
      <br/> 
      <h:inputText value="#{cc.attrs.attribute2}"/> 
      <br/> 
      <h:commandButton action="#{cc.attrs.actionMethod}" value="#{cc.attrs.actionBtnText}"/>   
    </h:form> 

</composite:implementation> 

</html> 

यह है मैं कैसे एक JSF पेज

<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:custom="http://java.sun.com/jsf/composite/custom"> 

... 

    <h:body> 
    <custom:demoCustomComponent attribute1="#{demoBB.value1 }" attribute2="#{demoBB.value2 }" actionBtnText="Button text!" actionBtn="#{demoBB.act}"/> 
    </h:body> 

में इसका इस्तेमाल करते हैं और इस समर्थन की फलियों कि करने के लिए समर्थन देता है:

इस घटक मैं बनाया है वह पृष्ठ जहां घटक

@Named("demoBB") 
@RequestScoped 
public class DemoBB { 

    private String value1; 
    private String value2; 
    public String getValue1() { 
     return value1; 
    } 

    public String act() { 
     System.out.println("Input 1: " + value1 + "\nInput 2: " + value2); 
     return null; 
    } 

    //Getters and setters 
    public void setValue1(String value1) { 
     this.value1 = value1; 
    } 
    public String getValue2() { 
     return value2; 
    } 
    public void setValue2(String value2) { 
     this.value2 = value2; 
    } 
} 

घटक ठीक रेंडर करने के लिए लगता है, लेकिन जब मैं बटन दबाएँ मैं एक अपवाद मिलेगा जिसमें बताया गया:

javax.faces.FacesException: ईएल अभिव्यक्ति का उपयोग कर पृष्ठ का उपयोग कर से समग्र घटक समाधान करने में असमर्थ '# {cc.attrs.actionMethod} '

क्या मैंने घटक के इंटरफेस या कार्यान्वयन में कोई गलती की? काम क्यों नहीं करता?

उत्तर

10

आप कार्रवाई विधि विशेषता नाम actionBtn का उपयोग कर definied:

<custom:demoCustomComponent ... actionBtn="#{demoBB.act}"/> 

लेकिन आप इसे वह विशेषता नाम actionMethod होने की उम्मीद कर रहे हैं:

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

यह संरेखित करें। वे वही होना चाहिए।

+0

अप्स, अब मैं देखता हूं, क्या मूर्खतापूर्ण गलती है। मैं हमेशा कस्टमकंपेंटेंट को देख रहा था लेकिन मेरी गलती index.xhtml में थी, मैंने अभी विशेषता का नाम गलत लिखा है :) धन्यवाद! – sfrj

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