2

JSFのようなコンポーネントベースのフレームワークを使用して、チェックボックスのコンポーネントが定義されます。

<h:selectManyCheckbox value="#{user.favNumber1}">
    <f:selectItem itemValue="1" itemLabel="Number1 - 1" />
    <f:selectItem itemValue="2" itemLabel="Number1 - 2" />
    <f:selectItem itemValue="3" itemLabel="Number1 - 3" />
</h:selectManyCheckbox>

生成された(x-html)コードは次のようになります。

<table>
<tr>
  <td>
    <input name="j_idt6:j_idt10" id="j_idt6:j_idt10:0" value="1" type="checkbox" />
    <label for="j_idt6:j_idt10:0" class=""> Number1 - 1</label></td>
  <td>
    <input name="j_idt6:j_idt10" id="j_idt6:j_idt10:1" value="2" type="checkbox" />
    <label for="j_idt6:j_idt10:1" class=""> Number1 - 2</label></td>
  <td>
    <input name="j_idt6:j_idt10" id="j_idt6:j_idt10:2" value="3" type="checkbox" />
    <label for="j_idt6:j_idt10:2" class=""> Number1 - 3</label></td>
  <td>
</tr>
</table>

Jquery関数は、1つのイベント(「ボタン」のクリック)でこのコンポーネントの状態を変更します(たとえば、値が「1」のボックス)。

<script>  // or in $(document).ready(){}
   $('#button').click(function(){ 
       var $checkbox = $(this).find('#j_idt6:j_idt10:0');
       $checkbox.attr('checked', !$checkbox.attr('checked'));
   });
</script>

クライアントの状態が変更されたことをJSF側に通知するにはどうすればよいですか。このレベルでは、JSFは、チェックボックスの値が0であると見なしますが、値は1になります。これにより、状態の不整合が発生します。

私のオプションは何ですか?

他の(Rich-、Primes-、MyFaces)でのJSFのAJAX-サポートについて考えていますが、多くの機能(ディスプレイ操作)を備えたリッチクライアントを構築しているため、コンポーネントを更新することを知っているので、それを使用することを躊躇します、Jquery UIウィジェット、Webリモーティング、動的動作、Webサービス、視覚効果など)。DOMクライアントの状態は高度に操作されていると想定されており、Jqueryは必須です。そのため、そのままにしておくことはできません。

ありがとう!

4

1 に答える 1

4

JSF2 を使用しているため、f:ajaxを使用する必要があります(詳細については Google を参照してください) 。

このように(あなたの場合、jqueryは必要ありません)

<h:selectManyCheckbox value="#{user.favNumber1}">
    <f:selectItem itemValue="1" itemLabel="Number1 - 1" />
    <f:selectItem itemValue="2" itemLabel="Number1 - 2" />
    <f:selectItem itemValue="3" itemLabel="Number1 - 3" />
    <f:ajax listener="#{user.someMethod}" />
</h:selectManyCheckbox>

あなたのuser豆のどこに

public void someMethod(AjaxBehaviorEvent ev) {
    System.out.println(favNumber1);
}
于 2012-07-12T11:32:55.550 に答える