0

一部のフォームを無効にするチェックボックスがあります。

<h:selectBooleanCheckbox id="ldapAuthEnabled" value="#{enabled}" label="check it">

チェックすると、フォームのすべてのフィールドが無効になるため、次のようになります。

<h:inputText mandatory="true" value="#{someVar}" 
disabled="#{!enabled}" required="#{enabled}" />

問題が発生するとき

  1. フィールドが無効になっていないときにフォームを保護しようとしています - 検証メッセージが表示されます!
  2. 次に、チェックボックスをクリックすると、すべてのフィールドが無効になりますが、それでも検証メッセージが表示されます! したがって、このため、controller.safe() メソッドに行くことさえできません。

問題は、期待どおりに機能させる方法です。- フィールドが無効になっている場合、検証メッセージを保持する必要はなく、フォームが無効であると考える必要はありません。

- 編集:

回答 (BalusC から) で示唆されているように、「値」を「バインディング」に変更したため、次のようなコードが作成されました。

<h:panelGroup id="my-panel">

<h:selectBooleanCheckbox id="myEdit" binding="#{checkbox}" label="enable it!">
  <f:ajax event="click" render="my-panel"/>
</h:selectBooleanCheckbox>

<h:inputText id="name" value="#{bean.name}" disabled="#{not checkbox.value}" required="true" />
   <h:outputText value="sometext"/>                      
</h:panelGroup>

「フォーム"<h:panelGroup id="my-panel">"」の一部です。

しかし、同じ結果が得られます-save()を実行できない検証エラー。

現在、Bean に「SessionScope」を使用しています。

4

1 に答える 1

3

具体的な機能要件は適切ですが、これまでに投稿されたコードは非常に奇妙で不完全であるため、具体的な問題を説明するのは困難です。モデル値はモデル値の更新フェーズでのみ更新され、リクエスト値の適用と検証フェーズのずっと前に無効/必須属性がチェックされるため、これまでのことは理論的には機能しません。

基本的に、次のように、ビュー スコープ内に存在するモデルのブール値プロパティにチェックボックスの値をバインドする必要があります。

<h:selectBooleanCheckbox value="#{bean.enabled}" />
<h:inputText required="true" disabled="#{not bean.enabled}" />

または、少なくとも物理的なチェックボックスコンポーネント自体を次のようにビューにチェックします。

<h:selectBooleanCheckbox binding="#{checkbox}" />
<h:inputText required="true" disabled="#{not checkbox.value}" />

チェックボックスがオン (オフ) の場合は、値を送信してフォームを ajax 更新することを忘れないでください。あなたの試みのどこにもそれが見られません。全体として、この完全なコピー & ペースト & ラン可能なキックオフの例は、あなたが始めるべきものです:

<h:form>
    <h:selectBooleanCheckbox binding="#{checkbox}">
        <f:ajax render="@form" />
    </h:selectBooleanCheckbox>

    <h:inputText required="true" disabled="#{not checkbox.value}" />
    <h:inputText required="true" disabled="#{not checkbox.value}" />
    <h:inputText required="true" disabled="#{not checkbox.value}" />

    <h:commandButton value="submit" />
    <h:messages />
</h:form>

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

于 2013-08-28T20:30:17.547 に答える