2011-10-18 18 views
6

JSF 2.0を使用して複合コンポーネントについて学習しています。コンポーネントでバッキングBeanのメソッドをトリガできるようにしたいので、簡単な例を作成しました。複合コンポーネントへのアクションメソッドの追加

これは私が作成したコンポーネントである:これは私が

<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> 

JSFページでそれを使用し、これはへの支援を与えるバッキングBeanがいかにある

<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> 

コンポーネントがあるページ

@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:EL式を使用してページを使用して から複合コンポーネントを解決できませんが「# {cc.attrs.actionMethod} '

コンポーネントのインターフェイスまたは実装で間違いを犯しましたか?なぜ機能しないのですか?

答えて

10

あなたは、属性名actionBtn使用してアクションメソッドをdefinied:

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

をしかし、あなたはそれが属性名actionMethodであることを期待している:

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

それを合わせます。彼らは同じでなければなりません。

+0

アップ、私は今、どのような愚かな間違いを参照してください。私は常にcustomComponentを見ていましたが、私の間違いはindex.xhtmlにありました。私は属性の名前を間違って書きました:)ありがとう! – sfrj

関連する問題