幸せのちから

          平凡的世界
          看似平常實(shí)崎嶇
          成如容易卻艱辛

          Struts的html:checkBox標(biāo)簽超郁悶的問題

          ???? 被Struts的html:checkBox標(biāo)簽使用的小問題郁悶了兩天,今天終于找到了解決的辦法。如果大家也遇到同樣的問題,可以參考。

          1)需求:

          ???? 當(dāng)通過菜單進(jìn)入頁(yè)面時(shí),頁(yè)面中的checkbox處于被選中狀態(tài),頁(yè)面提交后forward回本頁(yè),對(duì)應(yīng)的checkbox保持提交時(shí)的狀態(tài),也就是說:如果提交時(shí)checkbox是選中狀態(tài)回來仍然是選中狀態(tài);如果用戶在提交前將checkbox的勾去掉,回來時(shí)checkbox應(yīng)該為為選中狀態(tài)。

          2)問題:

          ???? 這個(gè)需求看起來很簡(jiǎn)單,只需要
          ??? 1)在對(duì)應(yīng)的form中將checkbox對(duì)應(yīng)的屬性設(shè)為true就行了:
          ???????? private boolean syaken = true;
          ??? 2)在對(duì)應(yīng)的jsp中使用html:checkbox標(biāo)簽就行了
          ? ? ?? <html:checkbox property="syaken"/>
          ??? 但問題是checkbox標(biāo)簽不會(huì)去set初始化值為true的checkbox屬性,不賦初值時(shí)Struts默認(rèn)賦為false;
          ??? 從網(wǎng)上找資料有人說可以實(shí)現(xiàn)ActionFrom的reset()方法將對(duì)應(yīng)的屬性值設(shè)為false,但reset方法是在form實(shí)例化以后被調(diào)用的,也就是說你初始化的值true將被重置為false,這和直接將屬性值設(shè)為false沒有任何區(qū)別,這樣做的結(jié)果是你從菜單進(jìn)入頁(yè)面時(shí)checkbox是處于不被選中的狀態(tài)。
          ?? 他們之間存在著矛盾,問題的關(guān)鍵就是每次提交時(shí),Struts并沒有去重新設(shè)置所有checkbox的屬性值,而是有選擇地(初始化值為false)地進(jìn)行重新設(shè)置。

          3)解決辦法:

          ???? 超級(jí)簡(jiǎn)單,在checkbox后面添加一個(gè)和checkbox的屬性同名并且value為“false”的隱藏輸入框,強(qiáng)迫Struts去重新設(shè)置checkbox的屬性值:
          ????? <html:checkbox property="syaken"/>&nbsp;
          ? ??? <input type="hidden" name="syaken" value="false">

          ???
          這個(gè)問題郁悶了我兩天,沒想到解決辦法這么簡(jiǎn)單。

          ????

          posted on 2006-04-14 01:03 Lucky 閱讀(20125) 評(píng)論(15)  編輯  收藏 所屬分類: java

          評(píng)論

          # re: Struts的html:checkBox標(biāo)簽超郁悶的問題 2006-04-14 11:48 webjlwang

          <html:checkbox property="syaken" value="true"/>
          就行了  回復(fù)  更多評(píng)論   

          # re: Struts的html:checkBox標(biāo)簽超郁悶的問題 2006-04-14 12:54 xplucky

          @webjlwang
          我試著按你提供的方法測(cè)試,由于你沒有說form中對(duì)應(yīng)的checkbox的property的初始值應(yīng)該如何設(shè)置,所以我進(jìn)行了兩組測(cè)試:
          1)將form中對(duì)應(yīng)的checkbox的property的初始值設(shè)置為true
          結(jié)果: 從menu中進(jìn)入JSP頁(yè)面,checkbox處于選中狀態(tài),當(dāng)我取消chekbox的提交,然后提交,返回頁(yè)面時(shí)我取消的checkbox仍然處于選中狀態(tài),測(cè)試失敗
          2)將form中對(duì)應(yīng)的checkbox的property的初始值設(shè)置為false
          結(jié)果: 從menu中進(jìn)入JSP頁(yè)面,checkbox處于未選中狀態(tài),測(cè)試失敗

          我不清楚你是不是還進(jìn)行了其他的設(shè)置?  回復(fù)  更多評(píng)論   

          # re: Struts的html:checkBox標(biāo)簽超郁悶的問題 2006-04-17 11:22 南一郎

          如果你是采取struts的MVC模式,解決方法更為簡(jiǎn)單,邏輯也更為清晰。Jsp->ActionForm->Action。Form里有對(duì)應(yīng)的屬性sysken,你可以按你的需要在這個(gè)類里預(yù)設(shè)屬性的默認(rèn)值。在Action里面,你取得這個(gè)Form后,可以顯式地用set方法設(shè)置返回到頁(yè)面時(shí)這個(gè)屬性的值,然后能過request.setAttribute("FormName",form)類似的方法設(shè)置一下,再return到你所指向的Forward不就行了嗎。就這么簡(jiǎn)單。這樣做更符合MVC的思想。
            回復(fù)  更多評(píng)論   

          # re: Struts的html:checkBox標(biāo)簽超郁悶的問題 2006-04-17 12:01 xplucky

          @南一郎
          不知道你做過實(shí)驗(yàn)沒有?  回復(fù)  更多評(píng)論   

          # re: Struts的html:checkBox標(biāo)簽超郁悶的問題 2006-05-19 13:32 LJS

          在ACTIONFORM要加reset方法就可以了.再測(cè)試看看  回復(fù)  更多評(píng)論   

          # re: Struts的html:checkBox標(biāo)簽超郁悶的問題 2006-05-31 11:28 pc

          http://www.kpwang.com/jsp_java/200644165429.htm Java程序中的事件處理
          http://www.kpwang.com/jsp_java/20064416536.htm Java多線程設(shè)計(jì)模式
          http://www.kpwang.com/jsp_java/200644155359.htm Java程序如何穿透帶有密碼驗(yàn)證的代理  回復(fù)  更多評(píng)論   

          # re: Struts的html:checkBox標(biāo)簽超郁悶的問題 2006-09-09 01:46 上官鴻

          <input type="checkbox" name="usrId" value="<bean:write name="pUsrList" property="usrId"/>" />
            回復(fù)  更多評(píng)論   

          # re: Struts的html:checkBox標(biāo)簽超郁悶的問題 2006-09-21 16:22 布袋魚

          我的做法和南一郎一樣。
          在頁(yè)面顯示前,后臺(tái)先把form值設(shè)定好
          比如
          后臺(tái):
          ModuleActionForm form = (ModuleActionForm) actionForm;
          form.setTbModule(new TbModule());
          form.setModuleClass_show("1");
          form.setModuleShow_show("1");
          return actionMapping.findForward("add");

          add找到config的頁(yè)面是這樣顯示
          <td align="right" class="TableLine2">模塊參數(shù):</td>
          <td class="TableLine1">
          <html:checkbox property="moduleClass_show" value = "1" />
          &nbsp;通用&nbsp;
          <html:checkbox property="moduleShow_show" value = "1" />
          &nbsp;顯示&nbsp;
          <html:checkbox property="moduleDisable_show" value = "1" />
          &nbsp;不可用&nbsp;
          <html:checkbox property="moduleCommon_show" value = "1" />
          &nbsp;常用模塊&nbsp; <font color="red">*</font>
          </td>  回復(fù)  更多評(píng)論   

          # re: Struts的html:checkBox標(biāo)簽超郁悶的問題 2006-09-21 16:22 布袋魚

          這樣前2項(xiàng)默認(rèn)選中
          后兩項(xiàng)非選中  回復(fù)  更多評(píng)論   

          # re: Struts的html:checkBox標(biāo)簽超郁悶的問題 2006-12-05 12:23 chen[匿名]

          非常感謝  回復(fù)  更多評(píng)論   

          # re: Struts的html:checkBox標(biāo)簽超郁悶的問題 2007-03-26 18:39 wellwei

          3Q  回復(fù)  更多評(píng)論   

          # re: Struts的html:checkBox標(biāo)簽超郁悶的問題[未登錄] 2007-03-31 10:01 gavin

          3q  回復(fù)  更多評(píng)論   

          # re: Struts的html:checkBox標(biāo)簽超郁悶的問題[未登錄] 2007-12-12 13:53 bobo

          value可以取出其值.
            回復(fù)  更多評(píng)論   

          # re: Struts的html:checkBox標(biāo)簽超郁悶的問題 2008-08-16 14:33 lutsao

          我暈...還真行..耶..  回復(fù)  更多評(píng)論   

          # re: Struts的html:checkBox標(biāo)簽超郁悶的問題[未登錄] 2009-03-23 23:34 null

          我試了。。好用

          支持樓主  回復(fù)  更多評(píng)論   

          <2006年4月>
          2627282930311
          2345678
          9101112131415
          16171819202122
          23242526272829
          30123456

          導(dǎo)航

          隨筆分類(125)

          文章分類(5)

          日本語(yǔ)

          搜索

          積分與排名

          最新隨筆

          最新評(píng)論

          主站蜘蛛池模板: 扬州市| 重庆市| 达拉特旗| 内丘县| 鹿泉市| 浦东新区| 敦化市| 革吉县| 青海省| 本溪| 叶城县| 乌审旗| 财经| 乌鲁木齐市| 达拉特旗| 大同市| 武冈市| 大石桥市| 中卫市| 安达市| 顺义区| 商丘市| 大厂| 柳州市| 社会| 鄂尔多斯市| 萝北县| 巨野县| 卢龙县| 望江县| 山东省| 托克逊县| 泗阳县| 郁南县| 苗栗市| 凤冈县| 寻甸| 西昌市| 伊吾县| 嘉义市| 金沙县|