解决在Struts中操作checkbox遇到的问题
在Struts中,操作checkbox控件时经常会遇到一些棘手的问题。如果页面上的checkbox初始没有值,这时你点上勾,Action可以取到这个checkbox的值(true)。但一旦formBean取得值,就把它保存下来,即使你点掉,Action得到的值仍然是(true)。换句话说,一旦formBean保存了checkbox的值,无论你在页面怎么点选,Action取得的值不会变。
初次遇到这个问题可能会很迷惑,下面就简单介绍一下解决的办法:
我们知道formBean是继承ActionForm的,在ActionForm中有一个没有实现的方法reset(),这个方法是在Action的方法之前执行的,这就是解决问题的关键。既然formBean能保存了checkbox的值(可能来自页面,也可能来自数据库),就不通过Action取得页面的值了,那么我们就可以利用reset()方法在每次提交时先将formBean里的值初始化。
在formBean中加一个方法reset()或者resetFormBean()
xxx_form.java
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionMapping;
………
public void resetFormBean(ActionMapping mapping, HttpServletRequest request)
{
this.checked = false;
}
………
这样,每次提交,Action都会取到页面上的值了。
初次遇到这个问题可能会很迷惑,下面就简单介绍一下解决的办法:
我们知道formBean是继承ActionForm的,在ActionForm中有一个没有实现的方法reset(),这个方法是在Action的方法之前执行的,这就是解决问题的关键。既然formBean能保存了checkbox的值(可能来自页面,也可能来自数据库),就不通过Action取得页面的值了,那么我们就可以利用reset()方法在每次提交时先将formBean里的值初始化。
在formBean中加一个方法reset()或者resetFormBean()
xxx_form.java
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionMapping;
………
public void resetFormBean(ActionMapping mapping, HttpServletRequest request)
{
this.checked = false;
}
………
这样,每次提交,Action都会取到页面上的值了。