Chinaunix首页 | 论坛 | 博客
  • 博客访问: 269116
  • 博文数量: 82
  • 博客积分: 2477
  • 博客等级: 大尉
  • 技术积分: 725
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-06 23:24
文章分类

全部博文(82)

文章存档

2013年(1)

2012年(3)

2011年(15)

2010年(36)

2009年(27)

分类: Java

2010-03-31 14:10:40

   今天在学习DynaActionForm的过程中,遇到了一个问题:就是进行ActionForm的reset操作,以及validate操作。看书上说,如果要做reset操作,需要使定义一个DynaActionForm的扩展类,然后在其中重载ActionForm的reset()方法,而validate()验证操作,最好时通过Validate框架实现。但是,这里考虑,如果按照以前的ActionForm的写法,如何去做呢?
    开始的时候,定义了一个类似与ActionForm的类,并且让它extends DynaActionForm类,然后,在其中定义了JSP form页面中的form元素变量(和相关的get/set方法),然后,重载了reset()和validate()方法,但是,在配置完以后,运行却出现了无法找到变量的get/set方法。后来看到书上说,DynaActionForm使用get(String name)和set(String name, Object value),来获取和设置form变量。但是考虑,如果是这样的话,这里应该怎么写呢,然后,又去网上查资料,后来在一篇英文文献上看到了相关的说明:应该在struts配置文件中的的子标签内定义form变量,然后,新建一个扩展自DynaActionForm的Form Bean,在其中只做reset()和validate()的重载(注,验证用户输入,可以通过get()方法获得),最后在struts中将刚才的那个的type属性设置了新建的那个Form Bean即可,然后运行,就没有错误了。以下给出示例:
index.jsp页面主体:

  
   
    
     
     
    
    
     
     
    
    
     
     
    
   

      
     

      
     

      
     

      
     

      
       
      

     

      
       
      

     

  

  
 

 
ActionForm bean代码:
public class LoginForm extends DynaActionForm {
 public void reset(ActionMapping mapping, HttpServletRequest request) {
  super.initialize(mapping);
 }
 public ActionErrors validate(ActionMapping mapping,
   HttpServletRequest request) {
  ActionErrors errors = new ActionErrors();
  if (this.get("username") == null || get("username").toString().length() < 1) {
   errors.add(ActionErrors.GLOBAL_MESSAGE, new ActionMessage(
     "loginform.java.validate.error.username"));
  }
  if (get("password") == null || get("password").toString().length() < 1) {
   errors.add(ActionErrors.GLOBAL_MESSAGE, new ActionMessage(
     "loginform.java.validate.error.username"));
  }
  return errors;
 }
}
 
Struts配置文件(局部):
   type="com.dynaactionform.struts.form.LoginForm">
   
   
 

  
 

 
     path="/login" scope="request" type="com.dynaactionform.struts.action.LoginAction">
   
  

 
 
Action对象:
public class LoginAction extends Action {
  public ActionForward execute(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response) {
  LoginForm loginForm = (LoginForm) form;
  String username = loginForm.get("username").toString();
  String password = loginForm.get("password").toString();
 
  request.removeAttribute(mapping.getAttribute());
  request.setAttribute("user", username);
  request.setAttribute("pwd", password);
  return mapping.findForward("display");
 }
}
 
display页面用于显示用户输入的用户名和密码,比价simple,这里就不贴了。
资源文件,可以自己建一个,这里也不贴了。
然后运行,页面就可以正常显示,并达到了表单验证和重置效果。
 
刚看DynaActionForm,因此理解不是很深刻,还望各位高手指教!
阅读(1118) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~