幸せのちから

平凡的世界
看似平常实崎岖
成如容易却艰辛

Struts的html:checkBox标签超郁闷的问题

     被Struts的html:checkBox标签使用的小问题郁闷了两天,今天终于找到了解决的办法。如果大家也遇到同样的问题,可以参考。

1)需求:

     当通过菜单进入页面时,页面中的checkbox处于被选中状态,页面提交后forward回本页,对应的checkbox保持提交时的状态,也就是说:如果提交时checkbox是选中状态回来仍然是选中状态;如果用户在提交前将checkbox的勾去掉,回来时checkbox应该为为选中状态。

2)问题:

     这个需求看起来很简单,只需要
    1)在对应的form中将checkbox对应的属性设为true就行了:
         private boolean syaken = true;
    2)在对应的jsp中使用html:checkbox标签就行了
       <html:checkbox property="syaken"/>
    但问题是checkbox标签不会去set初始化值为true的checkbox属性,不赋初值时Struts默认赋为false;
    从网上找资料有人说可以实现ActionFrom的reset()方法将对应的属性值设为false,但reset方法是在form实例化以后被调用的,也就是说你初始化的值true将被重置为false,这和直接将属性值设为false没有任何区别,这样做的结果是你从菜单进入页面时checkbox是处于不被选中的状态。
   他们之间存在着矛盾,问题的关键就是每次提交时,Struts并没有去重新设置所有checkbox的属性值,而是有选择地(初始化值为false)地进行重新设置。

3)解决办法:

     超级简单,在checkbox后面添加一个和checkbox的属性同名并且value为“false”的隐藏输入框,强迫Struts去重新设置checkbox的属性值:
      <html:checkbox property="syaken"/>&nbsp;
      <input type="hidden" name="syaken" value="false">

   
这个问题郁闷了我两天,没想到解决办法这么简单。

    

posted on 2006-04-14 01:03 Lucky 阅读(20105) 评论(15)  编辑  收藏 所属分类: java

评论

# re: Struts的html:checkBox标签超郁闷的问题 2006-04-14 11:48 webjlwang

<html:checkbox property="syaken" value="true"/>
就行了  回复  更多评论   

# re: Struts的html:checkBox标签超郁闷的问题 2006-04-14 12:54 xplucky

@webjlwang
我试着按你提供的方法测试,由于你没有说form中对应的checkbox的property的初始值应该如何设置,所以我进行了两组测试:
1)将form中对应的checkbox的property的初始值设置为true
结果: 从menu中进入JSP页面,checkbox处于选中状态,当我取消chekbox的提交,然后提交,返回页面时我取消的checkbox仍然处于选中状态,测试失败
2)将form中对应的checkbox的property的初始值设置为false
结果: 从menu中进入JSP页面,checkbox处于未选中状态,测试失败

我不清楚你是不是还进行了其他的设置?  回复  更多评论   

# re: Struts的html:checkBox标签超郁闷的问题 2006-04-17 11:22 南一郎

如果你是采取struts的MVC模式,解决方法更为简单,逻辑也更为清晰。Jsp->ActionForm->Action。Form里有对应的属性sysken,你可以按你的需要在这个类里预设属性的默认值。在Action里面,你取得这个Form后,可以显式地用set方法设置返回到页面时这个属性的值,然后能过request.setAttribute("FormName",form)类似的方法设置一下,再return到你所指向的Forward不就行了吗。就这么简单。这样做更符合MVC的思想。
  回复  更多评论   

# re: Struts的html:checkBox标签超郁闷的问题 2006-04-17 12:01 xplucky

@南一郎
不知道你做过实验没有?  回复  更多评论   

# re: Struts的html:checkBox标签超郁闷的问题 2006-05-19 13:32 LJS

在ACTIONFORM要加reset方法就可以了.再测试看看  回复  更多评论   

# re: Struts的html:checkBox标签超郁闷的问题 2006-05-31 11:28 pc

http://www.kpwang.com/jsp_java/200644165429.htm Java程序中的事件处理
http://www.kpwang.com/jsp_java/20064416536.htm Java多线程设计模式
http://www.kpwang.com/jsp_java/200644155359.htm Java程序如何穿透带有密码验证的代理  回复  更多评论   

# re: Struts的html:checkBox标签超郁闷的问题 2006-09-09 01:46 上官鸿

<input type="checkbox" name="usrId" value="<bean:write name="pUsrList" property="usrId"/>" />
  回复  更多评论   

# re: Struts的html:checkBox标签超郁闷的问题 2006-09-21 16:22 布袋鱼

我的做法和南一郎一样。
在页面显示前,后台先把form值设定好
比如
后台:
ModuleActionForm form = (ModuleActionForm) actionForm;
form.setTbModule(new TbModule());
form.setModuleClass_show("1");
form.setModuleShow_show("1");
return actionMapping.findForward("add");

add找到config的页面是这样显示
<td align="right" class="TableLine2">模块参数:</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>  回复  更多评论   

# re: Struts的html:checkBox标签超郁闷的问题 2006-09-21 16:22 布袋鱼

这样前2项默认选中
后两项非选中  回复  更多评论   

# re: Struts的html:checkBox标签超郁闷的问题 2006-12-05 12:23 chen[匿名]

非常感谢  回复  更多评论   

# re: Struts的html:checkBox标签超郁闷的问题 2007-03-26 18:39 wellwei

3Q  回复  更多评论   

# re: Struts的html:checkBox标签超郁闷的问题[未登录] 2007-03-31 10:01 gavin

3q  回复  更多评论   

# re: Struts的html:checkBox标签超郁闷的问题[未登录] 2007-12-12 13:53 bobo

value可以取出其值.
  回复  更多评论   

# re: Struts的html:checkBox标签超郁闷的问题 2008-08-16 14:33 lutsao

我晕...还真行..耶..  回复  更多评论   

# re: Struts的html:checkBox标签超郁闷的问题[未登录] 2009-03-23 23:34 null

我试了。。好用

支持楼主  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
 
<2006年4月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

导航

随笔分类(125)

文章分类(5)

日本語

搜索

积分与排名

最新随笔

最新评论