繁体   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