<s:form action="login.action" method="post" >
<table>
<tr>

<td>
<s:textfield name="loginUser.num" size="18" maxlength="30" label="用户名"/>
</td>
</tr>
<tr>
<td>
<s:password name="loginUser.password" size="18" maxlength="15" label="密  码" />
</td>
</tr>
<tr>
<td colspan="2">
<div id="button">
<s:submit value="登陆" />
</div>
</td>
</tr>
</table>
</s:form>这种形式的表单,loginUser.numloginUser.password
在提交时,这两个值是怎么传到session中的?如果要用的话,怎么取出来?

解决方案 »

  1.   

    这两个值没有在session中 应该在request里吧  要用的话 你直接在login.action所指向的处理类中建立loginUser对象 然后增加set 方法   struts2会自己注入到这个对象里的(根据页面控件的name 比如loginUser.num 就是这个控件的值会注入到loginUser对象的num属性里)
      

  2.   

    我在login.action所指向的处理类中建立了loginUser对象,也增加set 方法
    贴下代码吧public class UserLoginAction extends ActionSupport implements SessionAware{

    private Map session;
    private UserBean loginUser;
    boolean flag = false;

    public void setSession(Map session){
    this.session = session;
    }

    public UserBean getLoginUser() {
    return loginUser;
    } public void setLoginUser(UserBean loginUser) {
    this.loginUser = loginUser;
    }

    public String execute() throws Exception {
    // TODO Auto-generated method stub

    /*没有加入数据库验证的验证代码
    if(id.equals("dream")&&psw.equals("6642391")){
    LoginLog ll = new LoginLog();
    ll.save(id, psw);
    return SUCCESS;
    }
    else
    return ERROR;
    */
    //加入数据库验证之后的代码

    if(flag == true){
    LoginLog ll = new LoginLog();
    ll.save(loginUser.getNum()+"", loginUser.getPassword());
    return SUCCESS;
    }
    else
    return INPUT;
    }

    @Override
    public void validate() {
    // TODO Auto-generated method stub
    UserManager um = new UserManager();
    flag = um.isUserExit(loginUser);
    int type = um.getTypeById(loginUser.getNum());
    session.put("type", type);
    if(loginUser.getNum() == 0)
    addFieldError("loginUser.num","输入用户名不能为空!");
    if(loginUser.getPassword().equals(""))
    addFieldError("loginUser.password","输入的密码不能为空!");
    if(flag == false)
    addFieldError("loginUser.num","此用户不存在!");
    }

    }我主要是想,用拦截器来拦截没有登陆的用户的
    在拦截器类中,要取得session中的loginUser.num时,取不到
      

  3.   

    public class LogonInterceptor extends AbstractInterceptor { @Override
    public String intercept(ActionInvocation invocation) throws Exception {
    // TODO Auto-generated method stub
    // 取得请求的Action名
            
            // 取得Session。
    ActionContext ac = invocation.getInvocationContext();
    Map session = ac.getSession();
    System.out.println("session:"+session.get("num"));

    if (session.get("loginUser") == null) {                 
                return Action.LOGIN;   
            }   
               
    else{
    return invocation.invoke();
    }
    }    }这个是拦截器类
      

  4.   

    先用request把值取出来,然后创建session对象将值放进去。这样就可以从session中区值了。
      

  5.   

    可以直接从session中取吗?
      

  6.   

    也就是说
    loginUser.num
    loginUser.password
    这种形式的表单属性,传不到session中,但是可以传到request中?如果可以传到request中,怎么取出来?求详解~!
      

  7.   

    1.
    loginUser.num
    loginUser.password
    这种形式的表单属性,在Form提交的时候,struts2不会自动放到Session中,必须手动放置,struts2会自动放到ActionContext中的request和ValueStack中。2。loginUser.num
    loginUser.password
    从request中取得:Action中取得:直接在Action中使用loginUser.password即可。    或 String pwd = ServlertActionContext.getReqeust().getParameter("loginUser.password");
      

  8.   

    implements SessionAware
    -------->>>
    implements SessionAware,ServletRequestAwareprivate HttpServletRequest request;
    public void setServletRequest(HttpServletRequest request) {
    this.request = request;
    }这样loginUser就能取得,然后可以放到session中
      

  9.   

    你的action 实现 ServletRequestAware 接口
    定义public  HttpServletRequest request; (提供get set)  public void setServletRequest(HttpServletRequest arg0) {
    this.request = arg0; }以 request.getSession().setAttribute(name, value); 这种形式将你需要 的直 存入 session中