我正在Struts 2上做一个项目,我一点一点地获得知识..
我有这样的行动
<action name="backaction" class="HandlerAction">
<result name="user_profile" type="redirect">hai.jsp</result>
在类处理程序操作中,我有userprofile
和name
成员的对象age
。
在执行功能
中log.info(userprofile.getName())//it is giving name xyz
return "user_profile"
我正在使用hai.jsp,但我无法在jsp中检索该对象userprofile
中的值。
hai.jsp如下..
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
<body>
<s:textfield name="user_name" value="%{userprofile.name}"/>
</body>
</html>
我尝试将value="%{name}"
作为{{1}},但我没有得到值xyz ..
答案 0 :(得分:1)
将{@link HttpServletResponse#sendRedirect(String)sendRedirect}方法调用到指定的位置。响应被告知将浏览器重定向到指定位置(来自客户端的新请求)。执行此操作的结果意味着刚执行的操作(操作实例,操作错误,字段错误等)将丢失且不再可用。这是因为操作是基于单线程模型构建的。传递数据的唯一方法是通过会话或使用Web参数(url?name = value),它们可以是OGNL表达式。
答案 1 :(得分:1)
问题在于
<result name="user_profile" type="redirect">hai.jsp</result>
因为您正在使用重定向结果类型,这意味着框架将创建一个新的请求和响应对象并丢弃旧的请求/响应Object.So当您从操作返回时,您的用户对象是他们在值堆栈中的属性,直到您告诉S2您要使用redirect
结果类型。
在看到重定向结果类型时,它会丢弃所有现有数据,并会为您将其内容置于值堆栈中创建新请求,这就是为什么这对您不起作用。我不确定您使用{{1}的原因结果类型,因为您可以使用结果类型中的任何构建说redirect
。
如果您仍想使用重定向结果,建议您将用户个人资料数据保存在success
中,并在下一步操作中检索或使用scope-interceptor