浏览 4170 次
锁定老帖子 主题:JSF ajax 二级联动
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-03-12
基于ajax的 页面 二级联动不刷新
首先看页面
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%> <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%> <%@ taglib uri="http://richfaces.org/a4j" prefix="a4j"%> <%@ taglib uri="http://richfaces.org/rich" prefix="rich"%> <h:form id="f3"> <rich:panel header="ajax 下拉列表的二级联动 实现"> <h:outputLabel value="国家" />: <h:selectOneMenu id="country" valueChangeListener="#{userListAction.changeListeForCity}" value="#{userListAction.country}" style="width:100px" immediate="true"> <f:selectItems value="#{userListAction.countries}" /> <a4j:support event="onchange" reRender="city" immediate="true" /> </h:selectOneMenu> <h:outputLabel value="城市" />: <a4j:outputPanel> <h:selectOneMenu id="city" value="#{userListAction.city}" style="width:100px"> <f:selectItems value="#{userListAction.cities}" /> </h:selectOneMenu> </a4j:outputPanel> </rich:panel> </h:form>
说明 主要是 通过 a4j:support 去监听值改变事件去更新 要联动的 h:selectOneMenu 的值
下面是 监听 值改变事件的 方法 changeListeForCity
/** * 基于 ajax的 二级联动 * @param event */ public void changeListeForCity(ValueChangeEvent event){ cities.clear(); //通过该控件监听器 获取改变的新值 String newVal = (String) event.getNewValue(); if("CN".equals(newVal)){ cities.add(new SelectItem("WH","武汉")); cities.add(new SelectItem("SZ","深圳")); cities.add(new SelectItem("SH","上海")); }else if("US".equals(newVal)) { cities.add(new SelectItem("aa","aa")); cities.add(new SelectItem("bb","bb")); cities.add(new SelectItem("cc","cc")); }else{ cities.add(new SelectItem("0","请选择")); } }
其实 最关键的地方 还是 immediate="true"的设置
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |