【发布时间】:2016-11-01 13:24:55
【问题描述】:
我有一个 .jsp 页面,它执行以下检查以查看它是否应该显示错误消息:
<s:if test="#parameters.error == 1">
<ul><li>
<s:text name="login.error"/>
</li></ul>
</s:if>
错误参数来自请求参数(即/myPage.action?error=1)。
我已经将 jsp 页面调试到 org.apache.struts2.views.jspComponentTagSupport.doStartTag() 方法中,从那里我可以访问 ValueStack 并看到 HttpParameters 对象确实包含一个“错误”参数,我可以通过:
stack.getContext().get("parameters")).get("error")).getValue();
这将按预期返回值为1 的字符串。
但是,进一步调试代码似乎没有正确评估<s:if> 标记的测试属性。ognl.ASTEq.getValueBody(OgnlContext, Object) 方法尝试获取已解析测试查询的“孩子”的值。
即使 HttpParameters 包含它正在寻找的值 ("error"),它也会在返回 NotFound 结果的 ognl.OgnlRuntime.getFieldValue(OgnlContext, Object, String, boolean) 方法中结束。
这似乎是 struts/ognl 中的一个错误,用于解析值堆栈上的参数,但我不确定。
我使用的是 Struts 2.5.5。最近从 Struts 2.3.x 升级,这段代码在那个版本上工作得很好,所以要么是一个错误,要么是我不知道这些属性的访问方式发生了变化。
【问题讨论】:
-
如果错误保存在后端的请求中,那么在jsp上你可以用“#request.error”之类的东西来访问它。
-
@AlirezaFattahi 应该重新打开。
-
...重新打开:)
-
@AndreaLigios,AleksandrM,感谢您重新打开!
标签: jsp struts2 ognl http-request-parameters struts-tags