专注于高品质PHP技术等信息服务于一体 [STIEMAP] [RSS]

百度提供的广告:
技术文档
当前位置:首页 > 技术文档 >  > 
struts2 Interceptor 拦截器BUG

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比较简单。