這也是個(gè)開(kāi)源的標(biāo)簽庫(kù)^_^,因?yàn)槔贤饪偸呛軐?zhuān)業(yè)些寫(xiě)了很多好東西,可是我基本上是和他們相反,即沒(méi)有時(shí)間也比較懶得。Struts-layout是一個(gè)用來(lái)擴(kuò)充Struts的html標(biāo)簽的作用的,我以前寫(xiě)過(guò)(blog里)了怎么安裝使用的,這里就不說(shuō)了。
1.這次我們先看JSP的結(jié)構(gòu):
兩個(gè)select,其中第二個(gè)是<layout:optionsDependent/>它的dependsFrom的屬性需要和上面的那個(gè)select的property一致。countries是在request域的一個(gè)collection,而cities是countries的一個(gè)屬性,但是類(lèi)型也是collection。
<head>
<script src="/WebSample/config/javascript.js"></script>
</head>
<body>
<html:form action="/country.do">
<layout:select key="Country" property="countryId">
<layout:option value=""/>
<layout:options collection="countries" property="countryId" labelProperty="name" sourceOf="cityId"/>
</layout:select>
<layout:select key="City" property="cityId">
<layout:optionsDependent collection="cities" property="cityId" labelProperty="cityName" dependsFrom="countryId"/>
</layout:select>
<html:submit /><html:reset />
</html:form>
</body>
2.Action:你需要Action來(lái)初始化countries,
這樣你基本上就好了,夠簡(jiǎn)單吧!下面還有兩個(gè)類(lèi)的結(jié)構(gòu)就是Country類(lèi)和CityBean類(lèi):
public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response) {
List countries = new ArrayList();
for(int i = 0 ;i< 10 ;i++){
Country c = new Country();
c.setCountryId(new Integer(i));
c.setName("country"+i);
for(int j = 0;j< 5 ;j++){
c.addCity("city"+i+j,new Integer(i*10+j));
}
countries.add(c);
}
request.setAttribute("countries",countries);
return mapping.findForward("success");
}
Country類(lèi):3個(gè)如下屬性,外加Setter/Getter方法。
private String name;
private List cities = new ArrayList();
private Integer countryId;
CityBean類(lèi):2個(gè)如下屬性,外加Setter/Getter方法。
private Integer cityId;
private String cityName;
這些東西你當(dāng)然還可以和數(shù)據(jù)庫(kù)結(jié)合起來(lái)使用,或是和XML文件結(jié)合起來(lái)使用。基本上一個(gè)應(yīng)用最要需要考慮好
類(lèi)似Country類(lèi)這個(gè)結(jié)構(gòu)就可以了。
這個(gè)標(biāo)簽的方法是把所有的數(shù)據(jù)都會(huì)寫(xiě)入到html文件中,并寫(xiě)入相應(yīng)的JavaScript,你可以查看源碼。
<script>var countries = new Array();
countries[0] = new Object();
countries[0].value = "0";
countries[0].cities = new Array();
countries[0].cities[0] = new Object();
countries[0].cities[0].value = "0";
countries[0].cities[0].label = "city00";
countries[0].cities[1] = new Object();
countries[0].cities[1].value = "1";
countries[0].cities[1].label = "city01";
countries[0].cities[2] = new Object();
countries[0].cities[2].value = "2";
countries[0].cities[2].label = "city02";
countries[0].cities[3] = new Object();
countries[0].cities[3].value = "3";
countries[0].cities[3].label = "city03";
countries[0].cities[4] = new Object();
countries[0].cities[4].value = "4";
countries[0].cities[4].label = "city04"
.....
</script>
個(gè)人總結(jié),水平有限。主要是最近在論壇里看到不少關(guān)于這方面的問(wèn)題,然后有沒(méi)有最后的答案,所以借助開(kāi)源標(biāo)簽可以做到通用性,希望對(duì)您有所幫助。