4

I have a page which includes content from another page dynamically (this is done by a method in the bean)

firstPage.xhtml

<ui:include src="#{managedBean.pageView}">
    <ui:param name="method" value="#{managedBean.someAction}"/>
</ui:include>

This redirects to a secondPage which is within <ui:composition> which has commandButton.

secondPage.xhtml

<ui:composition>
..
..
<p:commandButton actionListener=#{method} value="Submit"/>
</ui:composition>

ManagedBean

public String pageView(){
return "secondPage.xhtml";
}

public void someAction(){
*someAction*
}

The commandButton in the secondPage.xhtml is not working.

Any help shall be much appreciated.

4

1 に答える 1

10

経由でメソッド式を渡すことはできません<ui:param>。それらは値式として解釈されます。

基本的に 3 つのオプションがあります。

  1. Bean インスタンスとメソッド名を 2 つのパラメーターに分割します。

    <ui:param name="bean" value="#{managedBean}" />
    <ui:param name="method" value="someAction" />
    

    []そして、次のようにブレース表記を使用してタグ ファイルでそれらを結合します。

    <p:commandButton action="#{bean[method]}" value="Submit" />
    

  2. 値式をメソッド式に変換するタグ ハンドラを作成します。JSF ユーティリティ ライブラリOmniFacesには、<o:methodParam>これを行う があります。タグファイルで次のように使用します。

    <o:methodParam name="action" value="#{method}" />
    <p:commandButton action="#{action}" value="Submit" />
    

  3. 代わりに複合コンポーネントを使用してください。を使用<cc:attribute method-signature>して、アクション メソッドを属性として定義できます。

    <cc:interface>
        <cc:attribute name="method" method-signature="void method()"/>
    </cc:interface>
    <cc:implementation>
        <p:commandButton action="#{cc.attrs.method}" value="Submit"/>
    </cc:implementation>
    

    次のように使用されます。

    <my:button method="#{managedBean.someAction}" />
    
于 2013-02-21T12:47:25.133 に答える