Struts Checkbox radio怎么進(jìn)行動(dòng)態(tài)的選擇
Posted on 2005-12-14 10:19 qiyadeng 閱讀(1934) 評(píng)論(0) 編輯 收藏 所屬分類: J2EE使用Struts的朋友,可能經(jīng)常發(fā)現(xiàn)使用頁面的一些標(biāo)簽的時(shí)候覺得不夠得心應(yīng)手。比如我們要設(shè)計(jì)一個(gè)用戶修改得信息的界面,需要調(diào)出一些用戶的信息。不幸的是,當(dāng)頁面中含有Checkbox或是radio的時(shí)候有沒有想過怎么處理?以前我也為這個(gè)苦惱,不少論壇上的人也發(fā)帖子問這個(gè)問題。最近看到了兩篇文章,可以解決這個(gè)問題。來自IBM developer:
http://www-128.ibm.com/developerworks/java/library/j-sr3.html
http://www-128.ibm.com/developerworks/java/library/j-sr4.html
先調(diào)簡(jiǎn)單的說起吧,我們來實(shí)現(xiàn)動(dòng)態(tài)的checkbox:
1、Form的設(shè)計(jì):我們這個(gè)例子有個(gè)String[] mountains,這個(gè)變量數(shù)組中包含很多的山的名字;還有個(gè)數(shù)組String[] selectedMountains就是默認(rèn)選中的一些山,像下面這樣很簡(jiǎn)單。
2、Action的設(shè)計(jì):這個(gè)就更簡(jiǎn)單了,一句話,由控制器切換到視圖。public class MultiboxForm extends ActionForm {
private String[] selectedMountains = {"Everest","K2","Lhotse","Cho Oyu"};
private String[] mountains ={"Everest","K2","Kangchenjunga","Lhotse","Makalu","Kangchenjunga South","Lhotse Middle","Kangchenjunga West","Lhotse Shar","Cho Oyu"};public String[] getMountains() {
return mountains;
}
public void setMountains(String[] mountains) {
this.mountains = mountains;
}
public String[] getSelectedMountains() {
return selectedMountains;
}
public void setSelectedMountains(String[] selectedMountains) {
this.selectedMountains = selectedMountains;
}
3、JSP的設(shè)計(jì):
return mapping.findForward("success");
這個(gè)相對(duì)比較復(fù)雜,也是比較中要的。<logic:iterate/>是迭代MultiboxForm中的mountians,
<html:form action="/multibox" name="multiboxForm" type="qiya.deng.struts.form.MultiboxForm">
<logic:iterate name="multiboxForm" property="mountains" id="mountain">
<html:multibox property="selectedMountains">
<bean:write name="mountain"/>
</html:multibox>
<bean:write name="mountain"/><br/>
</logic:iterate>
<br/>
<html:submit/><html:cancel/>
</html:form>
<html:multibox property="selectedMountains">
<bean:write name="mountain"/>
</html:multibox>
這個(gè)標(biāo)簽的作用就是selecteDMountains的值和迭代的mountain值一致的時(shí)候就會(huì)選中。
接下來說Radio,其實(shí)Form和Action部分都差不多,只是JSP頁面有點(diǎn)不一樣,Radio里面甚至牽涉到了JavaScript。
1.From的設(shè)計(jì):
2.Action同上一樣,切換到JSP頁面去。
private String selectedMountain = "Kangchenjunga West";
private String[] mountains ={"Everest","K2","Kangchenjunga","Lhotse","Makalu","Kangchenjunga South","Lhotse Middle","Kangchenjunga West","Lhotse Shar","Cho Oyu"};
public String[] getMountains() {
return mountains;
}
public void setMountains(String[] mountains) {
this.mountains = mountains;
}
public String getSelectedMountain() {
return selectedMountain;
}
public void setSelectedMountain(String selectedMountain) {
this.selectedMountain = selectedMountain;
}
3.重點(diǎn)部分JSP:
<html:form action="/radio" name="radioForm" type="qiya.deng.struts.form.RadioForm">
<bean:define id="selectedRadio" property="selectedMountain" name="radioForm"></bean:define>
<logic:iterate id="mountain" property="mountains" name="radioForm">
<bean:define id="mountainValue">
<bean:write name="mountain"/>
</bean:define>
<html:radio property="selectedMountain" value="<%=mountainValue%>" styleId="<%=mountainValue%>"/>
<bean:write name="mountain"/><br/>
</logic:iterate><br/>
<html:submit/><html:cancel/>
<script type="text/javascript">
<!--
var selectedRadio =
document.forms["radioForm"].elements["<bean:write name="selectedRadio"/>"];
selectedRadio.checked=true;
-->
</script>
</html:form>
"<bean:define/>"定義了一個(gè)PageContext作用域的屬性selectedRadio,下面的JavaScript的作用就是根據(jù)這個(gè)屬性找到應(yīng)該選中的Radio。其他的地方和上面那個(gè)很相似的。如果還是不太理解先運(yùn)行,看看生成的HTML代碼。