1

私は問題を抱えており、primefaces と JSF はまったく新しいものです。おそらくそれは私の知識不足ですが、まだ答えを見つけることができませんでした。XHTML があり、メインのボタンにはいくつかのボタンがあります。操作が成功したことを伝える 1 つのフィードバック ダイアログと、操作の名前を書きました。

ダイアログが表示され、問題ないように見えますが、メッセージは常に最後のボタンで指定したものです。おそらく、私は概念で何かを誤解しています.誰かが私が間違っていることを助けてくれますか?

コードは次のとおりです。

@ManagedBean
@ViewScoped
public class ActionSuccessController extends AbstractAction implements
    Serializable {

public String setParam(String actionName) {
    ResourceBundle messageBundle = ResourceBundle
            .getBundle("hu.avhga.web.partner.messages");
    description = messageBundle.getString("actionSuccess");
    this.actionName = actionName;
    return "";
}
...

ボタンがあるメインの XHTML

...
                            <p:commandButton id="lock"
                            value="#{msg['PartnerAdmin.button.lock']}" 
                            action="#{partnerAccountAdminAction.lock}" 
                            update=":partnerAccountAdminForm :actionSuccessForm"
                            disabled="#{partnerAccountAdminAction.disabledButtonMap.get('LOCK')}"
                            rendered="#{partnerAccountAdminAction.passwordAdmin}"
                            styleClass="gold"
                            onclick="#{actionSuccessController.setParam(msg['PartnerAdmin.button.lock'])}"
                            oncomplete="usersTableWidget.filter();actionSuccessDialogVar.show();"/>

                        <p:commandButton id="unlock"
                            value="#{msg['PartnerAdmin.button.unlock']}" 
                            action="#{partnerAccountAdminAction.unlock}"
                            update=":partnerAccountAdminForm :actionSuccessForm"
                            disabled="#{partnerAccountAdminAction.disabledButtonMap.get('UNLOCK')}"
                            rendered="#{partnerAccountAdminAction.passwordAdmin}"
                            styleClass="gold"
                            onclick="#{actionSuccessController.setParam(msg['PartnerAdmin.button.unlock'])}"
                            oncomplete="usersTableWidget.filter();actionSuccessDialogVar.show();"/>

                        <p:commandButton id="suspend"
                            value="#{msg['PartnerAdmin.button.suspend']}" 
                            action="#{partnerAccountAdminAction.suspend}"
                            update=":partnerAccountAdminForm :actionSuccessForm"
                            disabled="#{partnerAccountAdminAction.disabledButtonMap.get('SUSPEND')}"
                            rendered="#{partnerAccountAdminAction.userAdmin}"
                            styleClass="gold"
                            onclick="#{actionSuccessController.setParam(msg['PartnerAdmin.button.suspend'])}"
                            oncomplete="usersTableWidget.filter();actionSuccessDialogVar.show();"/>

                        <p:commandButton id="remove"
                            value="#{msg['PartnerAdmin.button.remove']}" 
                            action="#{partnerAccountAdminAction.remove}"
                            update=":partnerAccountAdminForm :actionSuccessForm"
                            disabled="#{partnerAccountAdminAction.disabledButtonMap.get('REMOVE')}"
                            rendered="#{partnerAccountAdminAction.userAdmin}"
                            styleClass="gold"
                            onclick="#{actionSuccessController.setParam(msg['PartnerAdmin.button.remove'])}"
                            oncomplete="usersTableWidget.filter();actionSuccessDialogVar.show();"/>
...

この後、次の XHTML をインポートします。

<p:dialog id="actionSuccessDialogId" header="#{actionSuccessController.actionName}"
        styleClass="dialog" closable="false"
        widgetVar="actionSuccessDialogVar" modal="true" appendToBody="true" dynamic="true"
        resizable="false" showEffect="fade" hideEffect="explode">
    <h:form id="actionSuccessForm" style="text-align:center;">
        <h:outputText value="#{actionSuccessController.description}" />
        <br />
        <br />
        <p:commandButton id="okButtonId" value="#{msg['Common.ok']}"
                        onclick="actionSuccessDialogVar.hide()" 
                        type="button" />
    </h:form>
</p:dialog>

これらの「setParam」は常に実行されると確信しており、私にとっては理由がないように思えます。繰り返しますが、なぜ私は常に「削除」プロパティの名前を取得するのかという質問です。アヤックスのせい?それとも、どこかをクリックするとこれらすべてが実行されるためですか? 私は少し混乱しています。前もって感謝します!

4

2 に答える 2

2

一言で言えば、onclick はそのようなセッターを呼び出すことはできません。あなたが望んでいるように見えるのは、パラメーターを Bean アクションに渡すことですよね? その場合は、f:setPropertyActionListener タグを使用します。したがって、ボタンは次のようになります。

<p:commandButton id="unlock"
                    value="#{msg['PartnerAdmin.button.unlock']}" 
                    action="#{partnerAccountAdminAction.unlock}"
                    update=":partnerAccountAdminForm :actionSuccessForm"
                    disabled="#{partnerAccountAdminAction.disabledButtonMap.get('UNLOCK')}"
                    rendered="#{partnerAccountAdminAction.passwordAdmin}"
                    styleClass="gold"
                    oncomplete="usersTableWidget.filter();actionSuccessDialogVar.show();">
      <f:setPropertyActionListener target="#{actionSuccessController.param}" value="#{msg['PartnerAdmin.button.lock']}" />
</p:commandButton>

f:setPropertyActionListener は、value 属性に指定された値で、ターゲットに指定されたセッターを呼び出します。

于 2013-01-24T12:44:23.153 に答える
0

アンドレの助けを借りて、最終的な解決策は次のとおりです。

<p:commandButton id="lock" immediate="true"
                            value="#{msg['PartnerAdmin.button.lock']}" 
                            action="#{partnerAccountAdminAction.lock}" 
                            update=":partnerAccountAdminForm :actionSuccessDialogId"
                            disabled="#{partnerAccountAdminAction.disabledButtonMap.get('LOCK')}"
                            rendered="#{partnerAccountAdminAction.passwordAdmin}"
                            styleClass="gold"
                            oncomplete="usersTableWidget.filter();actionSuccessDialogVar.show();">
                                <f:setPropertyActionListener target="#{actionSuccessController.actionName}" value="#{msg['PartnerAdmin.button.lock']}" />
                                <f:setPropertyActionListener target="#{actionSuccessController.description}" value="#{msg['PartnerAdmin.button.lock']}"/>
                            </p:commandButton>

同様の問題に遭遇している誰かに役立つことを願っています。2 つの setproperty 行を追加し、更新パラメーターを "... :actionSuccessDialogId" に変更して、ダイアログ全体で機能するようにしました。

于 2013-01-24T13:42:25.643 に答える