0

2 つの個別のバッキング Bean アクション メソッド onclick のいずれかを実行/呼び出す必要があるボタンがあります。フォームで使用できるパラメーターがあります。

action=""次のような条件に基づいて Java スクリプトを使用してその場で値を変更することは可能document.getElementById("buttonId").action = 'sameBean.newActionMethod'ですか?

しかし、これを行うとアクション メソッドのような例外が発生し、バッキング Bean では使用できません。

4

2 に答える 2

0

JSF タグの属性はサーバー側のみに配置されるため、JavaScript によってクライアント側からアクセスすることはできません。ただし、アクション メソッド自体の中で、または 2 つのコマンド ボタンでビジネス上の問題を分離することによって、異なるアクション メソッドを区別することができます。

ビジネス ジョブを実行するための 2 つのコマンド ボタン

ユーザーがどちらかのビジネス ジョブを実行することを通知されるのは良いことです。このアプローチを使用すると、AJAX を介していくつかの条件に基づいて、使用可能な一連のアクションを再レンダリングできます。

<h:form>
    <h:...>
        <f:ajax render="button-div" listener="#{bean.listener}" />
    </h:...>
    <h:panelGroup id="button-div" layout="block">
        <h:commandButton value="First job" action="#{bean.first}" rendered="#{bean.firstShown}" />
        <h:commandButton value="Second job" action="#{bean.second}" rendered="#{bean.secondShown}" />
    </h:panelGroup>
</h:form>

複数のビジネス ジョブを実行するための 1 つのコマンド ボタン

このアプローチでは、ボタンは 1 つしかなく、実際のアクションは何らかの条件に基づいてサーバーによって決定されます。<h:...>この条件は、明示的に、または隠しフィールドを使用して、タグを介してサーバーに渡す必要があります。

<h:form>
    <h:... value="#{bean.condition}">
    <h:commandButton value="Do some job" action="#{bean.action}" />
</h:form>

private String condition;
public void action() {
    if("first".equals(condition)) {
        first();
    } else if("second".equals(condition)) {
        second();
    } else {
        default();
    }
}
于 2013-05-17T11:57:05.017 に答える