action中的代码
public String add() throws Exception { Map<String, Object> session = ActionContext.getContext().getSession(); String yanzhengma = session.get("yanzhengma").toString(); Encode encode = new Encode(); log.debug("判断输入的验证码是否正确"); if(encode.encodeByMD5(this.yanzhengma.toUpperCase()).equals(yanzhengma)){ log.debug("输入的验证码正确"); //DaBase实例 DaBase base = new DaBase(); base.setType(type); base.setUsername(username); base.setPassword(password); base.setEmail(email); //判断是否注册成功 log.debug("开始注册。"); if(!baseService.add(base)){ addActionError("注册失败!"); log.debug("注册失败."); return ERROR; }else { //将用户名保存到request范围中 //ServletActionContext.getRequest().setAttribute("username", username); session.put("username", username); session.put("email", email); log.debug("注册成功。"); return SUCCESS; } }else{ log.debug("输入的验证码不正确"); return ERROR; } }
跳转的第一个jsp页面 中获取session的代码 <input type="hidden" name="username" value="${session.username }"/>
第二个页面也是如此 但有时侯能获取 有时候又不能获取
请问这是怎么回事呢?
你的程序有很强的struts1的痕迹,有几处写的不合适的地方,
1、你拿到的session不是真正的session,是struts2封装过的,是一个map,
所以写sessionScope取值是不合适的
2、取值时如果用struts2标签的话,直接写#username即能取到了
3、由于你使用了struts2封装过的session,所以当你再次往session中put同一个key的变量时,该key对应的值不再是唯一的,而会变成一个数组,也就是说,你的代码反复执行几遍之后,#username所取出的值会变成一个数组,而不是一个值了
${sessionScope.username},而不是${session.username}
你的session定义在方法中,又没有getter,页面上怎么取啊?你要把session定义成class member,再写个getter方法