0

Bean のリストに基づいてコマンド ボタンを動的にレンダリングする必要がある jsf2.0 (Mojarra) を使用して複合コンポーネントを開発しようとしています。ボタンをレンダリングできましたが、アクションがトリガーされません。問題を解決するために誰か助けてもらえますか?

ここにコードが続きます

<composite:interface>
<composite:attribute name="buttonList" required="true"
type="java.util.List" />
<composite:attribute name="beanName" required="true"
    type="java.lang.Object" />
</composite:interface>
<composite:implementation>

<ui:repeat var="listItem" value="#{cc.attrs.buttonList}">
<h:commandButton value="#{listItem.buttonName}"
action="#{cc.attrs.beanName.listItem.buttonAction}">
</h:commandButton>
</ui:repeat>
</composite:implementation>

これは次のように使用されます

<utils:buttonGroup buttonList="#{testButtonBean.buttonList}"
beanName="#{testButtonBean}" />

豆はこんな感じ

public class TestButtonBean {

public List<ButtonPOJO> buttonList = new ArrayList<ButtonPOJO>();
public List<ButtonPOJO> getButtonList() {
  return buttonList;
}   

public void setButtonList(List<ButtonPOJO> buttonList) {
this.buttonList = buttonList;
}

public void preProcess() {
if (null != buttonList && buttonList.size() == 0) {
ButtonPOJO ob1 = new ButtonPOJO("Continue", "next");
ButtonPOJO ob2 = new ButtonPOJO("Back", "prev");
buttonList.add(ob1);
buttonList.add(ob2);
}

}

public String next() {
return "page1";
}

public String prev() {
return "page2";
}
}
4

1 に答える 1

0
action="#{cc.attrs.beanName.listItem.buttonAction}"

これは正しくないです。listItemこの構文は、基本的にプロパティを探し、beanNameそれに対してリテラル アクションを呼び出そうとしbuttonAction()ます。

action="#{bean[methodName]}"アクション メソッド名を別の Bean プロパティからの文字列として指定する場合は、ブレース表記が必要です。

action="#{cc.attrs.beanName[listItem.buttonAction]}"

具体的な問題とは関係ありませんが、上記の解決策がまだ失敗する場合はvalue="#{cc.attrs.buttonList}"、フォーム送信リクエスト中に が非互換に変更されたことを意味するだけです。最初のリクエスト時とまったく同じリストがポストバック中に準備されていることを確認する必要があります。commandButton/commandLink/ajax action/listener method not invoked or input value not updatedのポイント 4 も参照してください。

于 2012-12-06T16:31:57.697 に答える