1.经常很多地方会有这种需求 即是下拉又有级联关系,
自己手写的下拉框
页面代码如下:
<af:selectOneChoice label="学院" id="soc49"
unselectedLabel="---请选择---"
autoSubmit="true"
valueChangeListener="#{viewScope.selectPublicBean.xyChange}"
contentStyle="width:125px;">
<f:selectItems value="#{viewScope.selectPublicBean.toChoiceXY}"
id="si109"/>
</af:selectOneChoice>
<af:selectManyChoice label="专业" id="smc1" partialTriggers="soc49" autoSubmit="true"
valueChangeListener="#{viewScope.selectPublicBean.dxChange}"
>
<f:selectItems value="#{viewScope.selectPublicBean.toChoiceZY}"
id="si2"/>
</af:selectManyChoice>
后台JAVA代码为:
/**
* 学院值改变事件
* @param valueChangeEvent 改变事件监听
*/
public void xyChange(ValueChangeEvent valueChangeEvent) {
String xyid = (String)valueChangeEvent.getNewValue();
System.out.println("学院"+xyid);
this.setXy(xyid);
if (xyid != null) {
this.setToChoiceZY(this.initzy(Integer.parseInt(xyid)));
}
this.bj = "";
}
/**
* 初始化专业下拉框的值
* @param dm 根据学院的值过滤下拉框的值
* @return zyid(代码),zymc(名称) 的Map集合
*/
public Map<String, Object> initzy(int id) {
Map<String, Object> map = new HashMap<String, Object>();
String sql = "select zyid,zymc from xtgl_zy where dwid = " + id;
DBTransaction db = getAm1().getDBTransaction();
Statement st = db.createStatement(0);
ResultSet rs = null;
try {
rs = st.executeQuery(sql);
while (rs.next()) {
map.put(rs.getString(2).toString(),
rs.getString(1).toString());
}
} catch (SQLException e) {
e.printStackTrace();
Noty.msg("查询数据异常");
}
return map;
}
public void dxChange(ValueChangeEvent valueChangeEvent) {
List<String> id = (List<String>)valueChangeEvent.getNewValue();
for(int i=0;i<id.size();i++){
System.out.println("专业ID"+id.get(i));
}
}