<h:form> <h:selectOneMenu value="#{someAction.choise}"> <f:selectItem itemLabel="a" itemValue="123"/> <f:selectItem itemLabel="b" itemValue="456"/> </h:selectOneMenu> </h:form>
上面的代码最后到客户端是一个下拉框,客户选择某一个选项,最后表单提交的时候,所选值被设置到someAction的choise属性上。可以尝试用firebug或者其他的浏览器工具在客户端自己添加一个option,给一个原本没有的值,然后提交。你会发现JSF会发现提交的值不再备选列表中,于是抛出异常。JSF的页面是组件化的,后端程序在运行过程中能够知道前端页面上有些什么东西,于是可以自动的去校验。
校验是一个很典型的例子,但在此之外,知道前端的状态还有很多其他的妙用。例如当一个表单提交的时候,你可以很轻易的知道一个输入框的原始值。
<h:form> <h:selectOneMenu value="#{someAction.choise}"> <jsf:selectItems value="#{someAction.options}" var="o" label="#{o}"/> </h:selectOneMenu> </h:form>