Struts Checkbox radio怎麼進行動態的選擇

使用Struts的朋友,可能經常發現使用頁面的一些標籤的時候覺得不夠得心應手。比如我們要設計一個用戶修改得信息的界面,需要調出一些用戶的信息。不幸的是,當頁面中含有Checkbox或是radio的時候有沒有想過怎麼處理?以前我也爲這個苦惱,不少論壇上的人也發帖子問這個問題。最近看到了兩篇文章,可以解決這個問題。來自IBM developer:
[url]http://www-128.ibm.com/developerworks/java/library/j-sr3.html[/url]
[url]http://www-128.ibm.com/developerworks/java/library/j-sr4.html[/url]

先調簡單的說起吧,我們來實現動態的checkbox:
1、Form的設計:我們這個例子有個String[] mountains,這個變量數組中包含很多的山的名字;還有個數組String[] selectedMountains就是默認選中的一些山,像下面這樣很簡單。
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;
 }
2、Action的設計:這個就更簡單了,一句話,由控制器切換到視圖。

 return mapping.findForward("success");
3、JSP的設計:

  <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>
這個相對比較複雜,也是比較中要的。<logic:iterate/>是迭代MultiboxForm中的mountians,
<html:multibox property="selectedMountains">
 <bean:write name="mountain"/>
</html:multibox>
這個標籤的作用就是selecteDMountains的值和迭代的mountain值一致的時候就會選中。
接下來說Radio,其實Form和Action部分都差不多,只是JSP頁面有點不一樣,Radio裏面甚至牽涉到了JavaScript。
1.From的設計:

 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;
 }
2.Action同上一樣,切換到JSP頁面去。 
3.重點部分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/>"定義了一個PageContext作用域的屬性selectedRadio,下面的JavaScript的作用就是根據這個屬性找到應該選中的Radio。其他的地方和上面那個很相似的。如果還是不太理解先運行,看看生成的HTML代碼。

0

收藏

qiyadeng

32篇文章,4W+人氣,0粉絲

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章