3

いくつかの p:menuitems を含む ap:menuButton があります。これらの各項目は、セッション スコープのバッキング Bean で特定のパラメーターを使用してメソッドを呼び出し、そのバッキング Bean に依存するモーダル ダイアログを開く必要があります。私の p:menuitem は次のようになります。

<p:menuitem value="..." oncomplete="dialog.show()" update=":dialog" actionListener="#{myController.createNewItem}">
</p:menuitem>

myController.createNewItem に渡されるパラメーターは、クリックされたメニュー項目に依存する唯一のものであり、3 つの方法で渡そうとしました。

1)<f:setPropertyActionListener target="#{myController.newItem.property}" value="..." />

モーダル ダイアログが f:setPropertyActionListener をブロックしているように見えるため、これは機能しません。myController.newItem.property のセッターは、ダイアログを閉じた後にのみ呼び出されますが、これでは十分ではありません。ダイアログがモーダルでない場合は機能しますが、モーダルにする必要があります。

2) <f:attribute name="param" value="..." /> event.getComponent().getAttributes() は、1 つの要素を持つマップを返します。これは、some_namespace.MARK_ID => 何らかの数値のように見えますが、これは明らかに渡したいパラメーターではありません。

3)<f:param name="param" value="..." /> これは actionListener ではなく action でのみ機能することを読みましたが、とにかく試してみました。FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap() には、フォームのすべてのフィールドといくつかの追加パラメーターが含まれていますが、渡したいものではないため、機能しないと思います。

ここでやろうとしていることを行う方法はありますか、それとも f:setPropertyActionListener と非モーダル ダイアログの使用にこだわっていますか? ありがとう。

4

2 に答える 2

1

argumensを渡したい場合は、action

<p:menuitem value="..." oncomplete="dialog.show()" update=":dialog" action="#{myController.createNewItem(your parameter)}">
</p:menuitem>

どこcreateNewItem

public void createNewItem(.....){
}

また

public String createNewItem(.....){

     return null;
}

ナビゲーションを使用actionする、return nullまたは実行しない...void

ajaxリクエストについては、とにかく内部で暗黙的に<p:menuitem実行していますajax

于 2012-07-04T15:39:00.307 に答える
1
<p:menuitem value="menu item 1" update=":someForm:someJSFComponent" actionListener="#{myBean.myMethodItemListener}">
    <f:attribute name="theItem" value="#{itemValue}" />
</p:menuitem>



bean side:

public void myMethodItemListener(ActionEvent event) {
    itemSel = (SomeClassCasting) event.getComponent().getAttributes().get("itemValue");
}

これは私のプロジェクトでうまくいきます:

<p:menuButton value="#{msg.curso}">
    <c:forEach items="#{cursoBean.cursos}" var="cursoItem">
        <p:menuitem value="#{cursoItem.nome}" update=":disciplinasForm:cursoSelLabel" actionListener="#{cursoBean.selecionaItemListener}">
            <f:attribute name="cursoItem" value="#{cursoItem}" />
        </p:menuitem>
    </c:forEach>
</p:menuButton>

public void selecionaItemListener(ActionEvent event) {
    itemSelecionado = (Curso) event.getComponent().getAttributes().get("cursoItem");
}
于 2014-01-27T03:17:53.070 に答える