Twenka

A simple person, living a simple life in every simple day

BlogJava 首页 新随笔 联系 聚合 管理
  3 Posts :: 0 Stories :: 0 Comments :: 0 Trackbacks
Form提交时,只有CheckBox处于勾选状态,生成的HTTP Request中的查询字符串才会包含CheckBox对应的参数项;否则,生成的HTTP Request中的查询字符串中无CheckBox对应的参数项。

例如,对于以下这个HTML Form(使用了Struts HTML Tag):

<html:form action="/checkAction.do" method="GET">
    
<html:checkbox property="checked" value="true"/><br/>
    
<html:submit/><html:reset/>
</html:form>

当用户勾选页面上的checkbox并提交时,HTTP请求中的查询字符串是:"checked=true";如果用户没有勾选checkbox就提交,HTTP请求则无查询字符串(request.getQueryString()返回null)。这样就导致一个问题:每当用户取消checkbox选中状态并提交时,Struts不会调用ActionForm(设为CheckForm)中的setChecked(boolean bool)方法将checked属性设为false。

解决之道是在CheckForm中override其父类的reset(ActionMapping mapping, HttpServletRequest request)方法(父类ActionForm的reset(ActionMapping mapping, HttpServletRequest request)方法只是一个空实现):

public void reset(ActionMapping mapping, HttpServletRequest request) {
    setChecked(
false);
}

Struts在从HTTPRequest中获取参数值填充到ActionForm的各个属性之前会调用ActionForm的reset()方法。这样,我们就实现了“CheckForm的checked属性值为false,除非用户在页面上选中了checkbox并提交”的逻辑。
posted on 2006-12-01 12:00 twenka 阅读(3517) 评论(0)  编辑  收藏 所属分类: J2EE

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


网站导航: