利用RichFaces实现级联下拉列表
利用RichFaces实现级联菜单,有两种方式,一是在客户端实现级联的操作,一是在客户端发送ajax到后台,后台返回数据到客户端。这里介绍的是第二种方式,这种方式需要向服务器访问数据,所以效力较低一种方式有点低。
实例:
<td>
<!–港口–>
h:selectOneMenu value=”#{model.main.data.portId}” id=”port”>
<f:selectItems
value=”#{BizBCFactory.buildConstsSelectItems(‘com.smartdot.entities.consts.DaoPort’)}” />
<a4j:support event=”onchange” reRender=”repository” ajaxSingle=”true” >
</a4j:support>
</h:selectOneMenu>
</td>
<td>
<!–仓储公司–>
<h:selectOneMenu id=”repository” value=”#{model.main.data.repository}” immediate=”true”>
<f:selectItems
value=”#{this.getPortStorageCompany(model.main.data.portId)}” />
</h:selectOneMenu>
</td>
使用<h:selectOneMenu>组件和AJAX实现级联效果。上面代码是港口级联仓储公司,当选择港口的时候后面仓储公司的下拉选框会得到该港口所属的仓储并刷新。 所以在被级联的组件<h:selectOneMenu>(即需要刷新的组件上面代码是仓储公司的下拉选框)里要加immediate=”true” 这段代码的意思是立即刷新 也就是只要数据一变就会刷新该组件。同时a4j组件 <a4j:support>里必须加上ajaxSingle=”true”
注: 但不能同时加 immediate=”true” 否则当前a4j组件也刷新 那就无法实现级联刷新的效果了(a4j组件的ajaxSingle刷新后自动变为了false)!
当ajaxSingle为true时,只是提交当前组件,而对于其他组件是不提交的,它的附带效果就是只对当前组件进行验证,而对其他的组件不会作任何验证,这一点上对于button和link来说感觉和immediate=”true”的效果很相似