2

私は JSF 2.2 を使用していますが、検証に合格した場合にのみ条件付きで ajax を使用してコンポーネントをレンダリングする方法があるかどうか疑問に思っていました。ajax の render 属性を使用することで、検証が成功したかどうかに関係なく、コンポーネントがレンダリングされます。私が求めているのは次のようなものです:

<f:ajax ... render="#{validationHasPassed ? 'foo' : ''}" />
...
<h:panelGroup id="foo">
          <!-- other components here -->
  </h:panelGroup>

このような同様の方法でコンポーネントを条件付きでレンダリングすることは可能ですか? 私の場合、レンダリングされた属性をフラグメントに設定してtrueまたはfalseに設定したくありません。これにより、検証が失敗した場合、DOMにフラグメントがまったく存在しなくなります。たとえば、ページとのやり取りの後に jQuery を介して取得された panelGroup 内のコンポーネントに特定の css スタイルを設定している可能性があり、検証が失敗した場合にセクションをレンダリングしたくないため、現在の視覚状態を維持できます。 .

4

1 に答える 1

2

を活用できますFacesContext#isValidationFailed()true現在の JSF ライフサイクルで検証が失敗した場合に返されます。の現在のインスタンスはFacesContextEL でも として利用できます#{facesContext}

属性をチェックして、renderedその親プレースホルダー コンポーネントを更新するだけです。renderedJavaScript がそれを見つけて更新することができないため、それ自体で属性が設定されているコンポーネントを条件付きでレンダリングすることはできないことに注意してください。あなたの理論的な<f:ajax>試みは、同じように失敗したでしょう。

例えば

<f:ajax ... render="foo-holder" />
...
<h:panelGroup id="foo-holder">
    <h:panelGroup id="foo" rendered="#{not facesContext.validationFailed}">
        Validation has not failed.
    </h:panelGroup>
</h:panelGroup>

最終的なマークアップに応じて、必要layout="block"に応じて追加して、<div>コンポーネントではなくコンポーネントにします。<span>

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

于 2015-05-31T08:18:32.143 に答える