jsf的问题[有答案后马上给分]
package org.hblz.web.jsf.backbean;
import java.util.List;
public class HelloBean {
private SendbookService bookService;
public SendbookService getBookService() {
return bookService;
}
public void setBookService(SendbookService bookService) {
this.bookService = bookService;
}
@SuppressWarnings("unchecked")
public void setTownListValue(ValueChangeEvent event) {
Long ctId = (Long) event.getNewValue();
if (ctId != null) {
List<Town> lst = this.getBookService().getTownList(ctId);
if (lst != null && lst.size() > 0) {
this.townList = new SelectItem[lst.size() + 1];
this.townList = new SelectItem[lst.size() + 1];
this.townList[0] = new SelectItem(new Long(-1), "请选择");
for (int i = 0; i < lst.size(); i++) {
this.townList[i + 1] = new SelectItem(lst.get(i).getId(),
lst.get(i).getName());
}
} else {
this.townList = new SelectItem[1];
this.townList[0] = new SelectItem(new Long(-1), "请选择");
}
}
}
public void setVillageListValue(ValueChangeEvent event) {
System.out.println("setVillageListValue");
Long tnId = (Long) event.getNewValue();
if (tnId != null) {
List<Village> lst = this.getBookService().getVillageList(tnId);
if (lst != null && lst.size() > 0) {
this.villageList = new SelectItem[lst.size() + 1];
this.villageList[0] = new SelectItem(new Long(-1), "请选择");
for (int i = 0; i < lst.size(); i++) {
this.villageList[i + 1] = new SelectItem(
lst.get(i).getId(), lst.get(i).getName());
}
} else {
this.villageList = new SelectItem[1];
this.villageList[0] = new SelectItem(new Long(-1), "请选择");
}
}
}
private HtmlForm mainForm;
private HtmlSelectOneListbox selectCounty;
private HtmlSelectOneListbox selectTown;
private HtmlSelectOneListbox selectVillage;
private SelectItem[] townList = null;
private SelectItem[] countyList = null;
private SelectItem[] villageList = null;
private Long countyId;
private Long townId;
private Long villageId;
public Long getCountyId() {
return countyId;
}
public void setCountyId(Long countyId) {
this.countyId = countyId;
}
public void setCountyList(SelectItem[] countyList) {
this.countyList = countyList;
}
public HtmlForm getMainForm() {
return mainForm;
}
public void setMainForm(HtmlForm mainForm) {
this.mainForm = mainForm;
}
public HtmlSelectOneListbox getSelectCounty() {
return selectCounty;
}
public void setSelectCounty(HtmlSelectOneListbox selectCounty) {
this.selectCounty = selectCounty;
}
public HtmlSelectOneListbox getSelectTown() {
return selectTown;
}
public void setSelectTown(HtmlSelectOneListbox selectTown) {
this.selectTown = selectTown;
}
public HtmlSelectOneListbox getSelectVillage() {
return selectVillage;
}
public void setSelectVillage(HtmlSelectOneListbox selectVillage) {
this.selectVillage = selectVillage;
}
public Long getTownId() {
return townId;
}
public void setTownId(Long townId) {
this.townId = townId;
}
public void setTownList(SelectItem[] townList) {
this.townList = townList;
}
public Long getVillageId() {
return villageId;
}
public void setVillageId(Long villageId) {
this.villageId = villageId;
}
public void setVillageList(SelectItem[] villageList) {
this.villageList = villageList;
}
@SuppressWarnings("unchecked")
public SelectItem[] getCountyList() {
if (countyList == null) {
if (this.countyList == null || this.countyList.length == 0) {
HttpSession session = (HttpSession) FacesContext
.getCurrentInstance().getExternalContext().getSession(
true);// 获得session
User u = (User) session.getAttribute("user");
List<County> countyList = this.getBookService()
.getCountyList(u);
this.countyList = new SelectItem[countyList.size() + 1];
SelectItem s = new SelectItem(new Long(-1), "请选择");
this.countyList[0] = s;
for (int i = 0; i < countyList.size(); i++) {
SelectItem item = new SelectItem(countyList.get(i).getId(),
countyList.get(i).getName());
this.countyList[i + 1] = item;
}
}
}
return countyList;
}
@SuppressWarnings("unchecked")
public SelectItem[] getTownList() {
if (this.townList == null || this.townList.length == 0
|| this.townList.length == 1) {
if (this.countyId != null) {
List<Town> lst = this.getBookService().getTownList(
this.countyId);
if (lst != null && lst.size() > 0) {
this.townList = new SelectItem[lst.size() + 1];
this.townList = new SelectItem[lst.size() + 1];
this.townList[0] = new SelectItem(new Long(-1), "请选择");
for (int i = 0; i < lst.size(); i++) {
this.townList[i + 1] = new SelectItem(lst.get(i)
.getId(), lst.get(i).getName());
}
}
} else {
this.townList = new SelectItem[1];
this.townList[0] = new SelectItem(new Long(-1), "请选择");
}
}
return townList;
}
public SelectItem[] getVillageList() {
if (this.villageList == null) {
this.villageList = new SelectItem[1];
this.villageList[0] = new SelectItem(new Long(-1), "请选择");
}
if (this.townId != null) {
List<Village> lst = this.getBookService().getVillageList(townId);
if (lst != null && lst.size() > 0) {
this.villageList = new SelectItem[lst.size() + 1];
this.villageList[0] = new SelectItem(new Long(-1), "请选择");
for (int i = 0; i < lst.size(); i++) {
this.villageList[i + 1] = new SelectItem(
lst.get(i).getId(), lst.get(i).getName());
}
} else {
this.villageList = new SelectItem[1];
this.villageList[0] = new SelectItem(new Long(-1), "请选择");
}
}
return villageList;
}
}
问题是,在我点击第一个下拉框的时候第二个下拉框可以随着变化,但是下拉第二个下拉框的时候第二个的信息丢失了,第三个下拉框也没有反应。这个是为什么?
jsp的代码是这样的:
<%@ page language="java" pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSF 'hello.jsp' starting page</title>
</head>
<body>
<f:view>
<h:form binding="#{bookBean.mainForm}" id="mainForm">
County:<h:selectOneListbox binding="#{helloBean.selectCounty}"
id="selectCounty"
valueChangeListener="#{helloBean.setTownListValue}"
onchange="this.form.submit();" size="1"
value="#{helloBean.countyId}" immediate="true">
<f:selectItems value="#{helloBean.countyList}" />
</h:selectOneListbox>
Town:<h:selectOneListbox binding="#{helloBean.selectTown}"
id="selectTown" onchange="this.form.submit();" size="1"
value="#{helloBean.townId}"
valueChangeListener="#{helloBean.setVillageListValue}"
immediate="true">
<f:selectItems value="#{helloBean.townList}" />
</h:selectOneListbox>
Village:<h:selectOneListbox binding="#{helloBean.selectVillage}"
value="#{helloBean.villageId}" onchange="this.form.submit()"
id="selectVillage" size="1" immediate="true">
<f:selectItems value="#{helloBean.villageList}" />
</h:selectOneListbox>
</h:form>
</f:view>
</body>
</html>