刚接触,做了一个简单的,登陆页面一个表单,提交到Action,然后把传入的值在数据库里查询,如果有就能成功登陆,如果没有还是发挥到登陆页面,如果不登陆直接访问登陆后的页面,中间有拦截器拦截, 
Map map = ActionContext.getContext().getSession(); 
map.put("user",name); 
上面这段是在Action里的,通过put把值传到拦截器中 
Map map = invocation.getInvocationContext().getSession(); 
map.get("user"); 
这段进行接收map.put传过来的值,可是每次传进来的都是空值,不知道为什么,请指教

解决方案 »

  1.   

    没用过struts2是不是没配置好
    或者获取方法不对
      

  2.   

    <interceptors>
    <interceptor name="auth" class="org.apache.interceptor.AuthInterceptor"></interceptor>
    <interceptor-stack name="default">
    <interceptor-ref name="auth"></interceptor-ref>
    <interceptor-ref name="defaultStack"></interceptor-ref>
    </interceptor-stack>
    </interceptors>

    <default-interceptor-ref name="myStack"></default-interceptor-ref>
    <global-results>
    <result name="login" type="redirect">login.jsp</result>
    </global-results>
    <action name="login" class="org.apache.action.LoginAction">
    <interceptor-ref name="default"></interceptor-ref>
    <result name="login">login.jsp</result>
    <result name="SUCCESS">admin/index.jsp</result>
    <result name="filter">login.jsp</result>
    <result name="ERROR">login.jsp</result>
    <interceptor-ref name="auth"></interceptor-ref>
    <interceptor-ref name="defaultStack"></interceptor-ref>
    </action>
    这是我xml文件中的代码,我觉得应该不会有问题的
      

  3.   

    我对struts2不熟,
    期待xx人解答
      

  4.   

    LoginAction.java
    package org.apache.action;import java.sql.ResultSet;
    import java.sql.Statement;
    import java.util.Map;import org.apache.conn.Conn;import com.opensymphony.xwork2.ActionContext;
    import com.opensymphony.xwork2.ActionSupport;@SuppressWarnings("serial")
    public class LoginAction extends ActionSupport {
    private String username = null;
    private String password = null;
    private Statement st = null;
    private ResultSet rs = null; public String getUsername() {
    return username;
    } public void setUsername(String username) {
    this.username = username;
    } public String getPassword() {
    return password;
    } public void setPassword(String password) {
    this.password = password;
    } @SuppressWarnings("unchecked")
    @Override
    public String execute() throws Exception {
    // TODO Auto-generated method stub
    try {
    Conn con = new Conn();
    st = con.conn().createStatement();
    System.out.println("执行查询");
    rs = st
    .executeQuery("select *from administrator where Admin_Name='"
    + this.username
    + "' and Admin_Password='"
    + this.password + "'");
    System.out.println("执行判断");
    if (rs.next() == true) {
    System.out.println("执行MAP");
    Map map = ActionContext.getContext().getSession();
    String name=(String)map.get(this.username);
    String password=(String)map.get(this.password);
    System.out.println("执行username");
    map.put("user", name);
    System.out.println("执行password");
    map.put("pass", password); return "SUCCESS"; } else {
    this.addFieldError("username", "用户名错误");
    this.addFieldError("password", "密码错误");
    return "filter"; } } catch (Exception ex) {
    System.out.println(ex.getMessage());
    return "ERROR";
    } }}
    AuthInterceptor.java
    package org.apache.interceptor;import java.util.Map;import com.opensymphony.xwork2.Action;
    import com.opensymphony.xwork2.ActionInvocation;
    import com.opensymphony.xwork2.interceptor.AbstractInterceptor;@SuppressWarnings("serial")
    public class AuthInterceptor extends AbstractInterceptor {
    @SuppressWarnings("unchecked")
    @Override
    public String intercept(ActionInvocation invocation) throws Exception {
    // TODO Auto-generated method stub
    try
    {
    Map map = invocation.getInvocationContext().getSession();
    if (map.get("user") == null && map.get("pass") == null) {
    System.out.println(map.get("user"));
    System.out.println(map.get("pass"));
    System.out.println(Action.LOGIN); return Action.LOGIN;
    } else {
    System.out.println("invocation.invoke");
    return invocation.invoke();
    }
    }
    catch(Exception ex)
    {
    System.out.println(ex.getMessage());
    return Action.LOGIN;
    }
    }}使用print打印,可只执行interceptor中的,Action中的没有反应,连接数据库的代码我就不帖了
      

  5.   

    加入这个试试<interceptor-ref name="token-session" />没看出有什么问题