struts2.18BUG
1,Interceptor 拦截器 执行invoke(); 方法放行操作后,传输的对象被清空。
2,在 action 方法当中自己写验证时出现错误,拿验证码来说,第一次输入的是错的,第二次输入还是错的,
第三次输入的是正确的,可是程序还是会执行错的那段代码。
package com.qingruxu.action; import javax.servlet.http.HttpSession; import org.apache.struts2.ServletActionContext; import org.springframework.dao.support.DaoSupport; import com.opensymphony.xwork2.ActionSupport; import com.qingruxu.dao.IUserDao; import com.qingruxu.pojo.User; import com.qingruxu.tools.MD5; public class Login extends ActionSupport { private User user=new User(); private String imgcode; public String getImgcode() { return imgcode; } public void setImgcode(String imgcode) { this.imgcode = imgcode; } private IUserDao userdao; public void setUserdao(IUserDao userdao) { this.userdao = userdao; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } @Override public void validate() { this.setFieldErrors(null); HttpSession session =ServletActionContext.getRequest().getSession(); String valcode=(String) session.getAttribute("valcode"); if(!(imgcode.trim().equalsIgnoreCase(valcode.trim()))) { System.out.println("ok...."); this.addFieldError("msginfo", "验证码输入有误"); } } //用户登陆 public String login() { // this.setFieldErrors(null); HttpSession session =ServletActionContext.getRequest().getSession(); String valcode=(String) session.getAttribute("valcode"); if(!(imgcode.trim().equalsIgnoreCase(valcode.trim()))) { this.addFieldError("msginfo", "验证码输入有误"); return ActionSupport.INPUT; } // boolean flag=false; try { user.setPassword(MD5.getMD5(user.getPassword())); flag=userdao.userLogin(user); if(flag) { ServletActionContext.getRequest().getSession().setAttribute("login", user.getUserid()); return "manage"; } } catch (Exception e) { e.printStackTrace(); } return ActionSupport.INPUT; } } |
在实际使用过程中使用最多的是分发action 例如:有 action 有两个方法,
1, action_login.action 2,action_logout.action
这样的话,如果想写在使用验证的话,就必须写到 这个 action 方法的内部如 login ()
因为写在外部,是验证所有的操作。用户退出 logout () 方法执行的时候,并没有验证码验证所以不能使用公共的public void validate() 方法,只可以写到内部,可是这样就出了问题。
暂时没有什么好的解决方法,不然就是不使用分开action 要不然就是自定义错信息,不使用系统中的。FieldError()。
个人认为还是使用多个action比较简单。