拦截器获得不到我这个action提交到context的参数,得到的是nullAction:
public class LoginAction extends ActionSupport  {    
    private String username;
    private String password;    
    public String execute() throws Exception { try {
HttpServletRequest req = ServletActionContext.getRequest(); 
String name = req.getParameter("name");
ActionContext context = ActionContext.getContext(); 
Map<String, Object> session = context.getSession();
session.put("user", "user");
                           代码
                           return ...;
} catch (Exception e) {
e.printStackTrace();
return "fail";
}
    }
}
拦截器:import java.util.Map;import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;public class LoginInterceptor extends AbstractInterceptor {
public final static String USER_SESSION_KEY = "username";
@Override
public String intercept(ActionInvocation invocation) throws Exception {

System.out.println("浸入拦截器了");
ActionContext ctx = invocation.getInvocationContext();
Map session = ctx.getSession();
String user = (String)session.get("user");
System.out.println(user + "=");  //////这里获得参数并输出
if (user != null) {
return invocation.invoke();
}
ctx.put("tip", "还没登陆");
return Action.LOGIN;
} }输出 null=
请问这个是怎么回事啊?

解决方案 »

  1.   

    Map session = ctx.getSession();
    String user = (String)session.get("user");
    System.out.println(user + "="); //////这里获得参数并输出为什么从session中取值?应该从request中取值把
      

  2.   

    因为loginAction是把参数放到session内的啊Map<String, Object> session = context.getSession();
    session.put("user", "user");
      

  3.   

    你的action对象的属性需要public set方法和get方法,初始化参数的拦截器会自动把参数设置如target的action的。ActionInvocation  是拿的到target对象的,即action对象,这样在拦截器中可以通过action的get的方法获得到你的输入参数。为什么还要放session里面,没必要了!
      

  4.   

    我主要是想做登陆验证功能,所以要用session咯
      

  5.   

    问题解决了,原来是frameset框架session丢失的问题,我晕。