先说第二个问题,在javascript中访问h:form 中的控件,不能直接getelementbyid(“id”),在JSF中,访问的格式为getelementbyid("formname:id"),如果有h:form 嵌套
比如
<h:form id="form1">
<h:form id="form2">
<h:outputtext id="test">
</h:form>
</h:form>
用了伪码,其访问的格式为getelementbyid("form1:form2:test"),用jsf的模板访问也遵循同样的规则
第一个问题,在除了commandbutton和commandlink这两个控件外。如果你要想在用户操作控件的时候执行后台bean中的方法,有两种方案
第一种,就是在用户动作的时候提交表单
比如
<h:selectonemenu οnchange="submit()" valuechangelistener="#{bean.fun()}">
<f:selectitems...>
</h:selectmenu>
这样,当你选择列表中的选项的时候,就会提交表单,就是触发JSF生命周期,就会产生消息以调用bean中的fun函数
好吧,提交表单的方式总是让人不满意,因为现在都是ajax局部刷新的天下了,第二种方法就是将控件ajax化
<f:ajax>
<h:selectonemune valuechangelistener="#{bean.fun()}">
<f:selectitems >
</h:selectonemenu>
</f:ajax>
这样,这个控件就被ajax化了,让有选择事件的时候,虽然没有提交表单,但是一样会触发生命周期。