2

jsf ページに ah:commandButton があります。そして、条件に基づいてレンダリングする必要があります。条件のプロパティは、ページへの隠し入力です。レンダリング条件が指定されている場合、ボタンのアクション メソッドは呼び出されません。

何か案は?

サンプルコードは次のとおりです。

<h:commandButton value="Button" 
action="#{bean.method}"
rendered="#{bean.conditon}"
type="submit"/>

<h:inputHidden value="#{bean.condition}" />
4

1 に答える 1

3

あなたの Bean はリクエストスコープであることを理解しています。そうでなければ、この問題は発生しません。これはタイミングの問題です。

このrendered属性は、JSF ライフサイクルの「リクエスト値の適用」フェーズでも決定されます。ただし、送信された値は、後で JSF ライフサイクルの「モデル値の更新」フェーズ中にのみモデルに設定されます。したがって、rendered属性が評価されるとき、非表示の入力から送信された値を取得するのではなく、プロパティのデフォルト値を取得します。

request スコープをview スコープに変更するオプションがない場合は、この問題を別の方法で解決する必要があります。<h:inputHidden>を a に変更し、マップ上で<f:param>値を挿入する最も簡単な方法の 1 つ:@ManagedProperty#{param}

<h:commandButton value="Button" 
    action="#{bean.method}"
    rendered="#{bean.conditon}"
>
    <f:param name="condition" value="#{bean.condition}" />
</h:commandButton>

type="submit"(すでにデフォルトであるため、省略したことに注意してください)

@ManagedProperty("#{param.condition}")
private boolean condition;

以下も参照してください。

于 2013-01-30T21:06:26.087 に答える