日期:2014-05-20  浏览次数:20705 次

新手求救 struts jstl 问题。
a.java
Java code
public ActionForward register(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) {
    /...../
    User user= .....//这里user就是从表单取得。
    System.out.println("user.getName():"+user.getName()); //这里可以打印出来
    if(user!=null && !user.getName().trim().equals("")){
    request.setAttribute("user", user);
    }
    forward = mapping.findForward("login.jsp");//这里跳到 login.jsp页面
    return forword;
}


login.jsp 页面
Java code
<html:form  action ="login.do?method=login">
<c:out  value="${user.name}"/>   //这里也打印出来了。说明user的值还在request里。
/***
* 这里怎么把user设定下? 让这个页面提交到login.do的action里也能通过request.getAttribute得到???
***/
</html:form>



由login.jsp提交到b.java后,user就得不到了:
b.java
Java code
public ActionForward login(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) {
    /...../
    User user= (User)request.getAttribute("user");   //我这里愣是得不到user的值。总是null

    if(user!=null && !user.getName().trim().equals("")){
    request.setAttribute("user", user);
    }else{
        System.out.println("user.getName():"+user.getName());
    }
    return forword;
}


------解决方案--------------------
<input type="hidden" name="user" value="${requestScope.user}" />
------解决方案--------------------
不懂struts
<c:out value="${user.name}"/> 
这里输出的user.name应该是上一次请求的参数

你再提交request就重置了 可以在login.jsp里把user添加到session域里
------解决方案--------------------
那是不可能的.
/***
* 这里怎么把user设定下? 让这个页面提交到login.do的action里也能通过request.getAttribute得到???
***/


因为这个页后返回到浏览器的时候这个request对像已经没有了.所以再点这个页面去提交就是新的request了.不可能再通过request.getAttribute()取到上一次的放进去的值.
------解决方案--------------------
只能是把user的一些值放到页面的一些标签中去保存.然后下一个.do可以通过取参数得到这些值,再组织成user(如何有需要的话)
------解决方案--------------------
用原始的办法 先把USER的东西放到 隐藏域里 然后在.do的时候 
在给带过去
------解决方案--------------------


usr是对象,不是字符串,通过页面的传递后就没了
------解决方案--------------------
探讨
只能是把user的一些值放到页面的一些标签中去保存.然后下一个.do可以通过取参数得到这些值,再组织成user(如何有需要的话)

------解决方案--------------------
request.getAttribute(String str,Object obj)设定的只能在一次请求中有效。你要想在action中得到这个值,你在setAttribute()一下呀,或者用隐藏域,在action中getParameter()
------解决方案--------------------
你可以这样嘛,你在action中通过隐藏表单得到你注册的这个用户的ID,用request.getparameter();得到,然后再去数据库里查相对的记录就是了啊??
------解决方案--------------------
request只能用于一次传值时使用,到下一个请求就失效了。
楼主如果采用1楼的方法,就是只能在下一次传值时使用这个值。
而2楼的方法则是保证会话期间都能使用这个值
但如果象楼主说的又不想用session,又不想每个页面都把值放到request里面去传递给下一个页面
实在是很难伺候啊。呵呵
最好的方法是把id和name等重要的、经常要使用的值放到session中去,如果需要使用email等值了,再从session中取id,然后到后台去查。这样一方面可以保证你每次使用到的值都能很好的调用,也能够保证效率,并且防止大量的数据传输所带来的安全隐患。