在JSF2中,页面上的每一个组件都有一个id属性,JSF2会利用这个id的值来生成一个clientId,如果页面没有为id提供值,JSF2 就会自动生成一个clientId,默认的格式: 根组件的id:组件的id。例如:
<f:view>
<h:form title="regedit" id="myForm">
<h:inputText value="#{userBean.birthday}" id="birthday"/>
</h:form>
</f:view>
其中form的id为"myForm",而input的id为"myForm:birthday",当然这其中的分隔符是可以修改的,方法就是在web.xml中添加一个参数:javax.faces.SEPARATOR_CHAR
<context-param>
<param-name>javax.faces.SEPARATOR_CHAR</param-name>
<param-value>-</param-value>
</context-param>
这样input生成的id就为"myForm-birthday"。有时候在应用ajax框架的时候,那些框架会不能识别id标识中有“:”符号,就找不到相应的节点,当然可以有其他解决方法,但这也是一种方式。比如在对上面的input应用jquery的datepicker功能的时候,juqery是不允许id中出现“:”的,不然就找不到对象了:
<script>
$(function() {
$( "#myForm-birthday" ).datepicker();
});
</script>
这样就可以应用了.
JSF2生成的这个clientId是唯一的,当然在JSF2应用的任何地方,也是有办法根据clientId来得到对应的组件的,比如:
FacesContext.getCurrentInstance().getViewRoot().findComponent("myForm-birthday").getAttributes().get("value")
这样就可以根据clientId找到对应的组件,并进行更多的操作,比如得到组件的所有属性值等等。