簡體   English   中英

通知JSF Server端有關Jquery / Ajax對(DOM)客戶端狀態所做的更改

[英]Notify JSF Server side about changes on (DOM) client-state made by Jquery/Ajax

使用基於組件的框架(如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”的框):

<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是必須的。.因此不能將其放在一邊。

謝謝!

由於您使用的是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 bean中的何處

public void someMethod(AjaxBehaviorEvent ev) {
    System.out.println(favNumber1);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM