ActionForm本质是一个JavaBean,主要功能有:收集数据,数据校验,类型转换,传输对象
ActionForm的编写要注意下面几点:
1、 自定义的ActionForm必须继承自org.apache.struts.action.ActionForm,基类ActionForm不能实例化
2、 ActionForm中的属性名必须和页面控件输入框的属性名相同,并提供各个属性的get和set方法
3、 如果你要求ActionForm 在传递属性到Action之前校验它们,你就必须实现validate方法,在该方法中实现你要进行的验证工作
4、 如果想在组装前初始化属性,必须实现 reset 方法, 它会在ActionForm 每次组装前自动被调用 。所以如果你想用一个ActionForm分步收集几个页面的数据,就不能实现原reset方法,而要自定义一个resetField之类的方法初始化属性,并设置该ActionForm的scope为session,然后只在第一个收集页面相应的Action中调用该resetField方法(不然每个页面提交时都会自动调用reset方法初始化一次,到最后只剩最后面一个页面的数据被收集到了)
ActionForm实例:
package cn.huan.struts;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
/**
* 登录的ActionForm负责收集数据
* ActionForm中的属性名必须和表单中输入框的属性名相同
* @author 刘银环
*
*/
public class LoginActionForm extends ActionForm {
private String username;
private String password;
/**
* @return the username
*/
public String getUsername() {
return username;
}
/**
* @param username the username to set
*/
public void setUsername(String username) {
this.username = username;
}
/**
* @return the passward
*/
public String getPassword() {
return password;
}
/**
* @param passward the passward to set
*/
public void setPassword(String password) {
this.password = password;
}
/* (non-Javadoc)
* @see org.apache.struts.action.ActionForm#reset(org.apache.struts.action.ActionMapping, javax.servlet.http.HttpServletRequest)
*/
@Override
public void reset(ActionMapping mapping, HttpServletRequest request) {
System.out.println("--------LoginAcionForm.reset()--------");
}
/* (non-Javadoc)
* @see org.apache.struts.action.ActionForm#validate(org.apache.struts.action.ActionMapping, javax.servlet.http.HttpServletRequest)
*/
@Override
public ActionErrors validate(ActionMapping mapping,
HttpServletRequest request) {
System.out.println("-----LoginAcitonForm.validate()");
// UserManager.getInstance().login(username, password);
return null;
}
}