我有一个工作流程,我需要渲染一个异常页面。但是这个异常页面是通用的,可以从各种情况调用。我需要在每个异常页面中显示一些自定义文本。所以我想我可以在结果标签中设置一些“参数”。它将在最终的jsp页面中自动提供。但我无法检索(或设置)它。这是我的相关代码 -
struts.xml -
<global-results>
<result name="TV_ACCESS_NOT_ALLLOWED">
<param name="location">/jsp/base/exception/accessNotAllowedException.jsp</param>
<param name="appDisplayName">Television</param>
</result>
<result name="RADIO_ACCESS_NOT_ALLLOWED">
<param name="location">/jsp/base/exception/accessNotAllowedException.jsp</param>
<param name="appDisplayName">Radio</param>
</result>
</global-results>
在我的JSP页面中,我尝试了以下选项 -
<gs:property value="%{appDisplayName}" />
<gs:property value="#appDisplayName" />
<gs:property value="appDisplayName" />
<gs:property value="%{param.appDisplayName}" />
<gs:property value="#param.appDisplayName" />
<gs:property value="param.appDisplayName" />
他们都没有奏效。如果你们可以指出我正确的方向,将不胜感激。还有一种方法可以打印当前上下文中包含的所有可用变量。会话,页面,请求范围?
更新 我最终通过在父操作中设置变量来解决问题,该操作最初触发了异常。我原本不想这样做,因为我不想污染父动作,但我修改了我的模板以处理正常的事物流以利用新变量。
答案 0 :(得分:1)
为此目的使用全局异常映射不是结果,你需要一个结果,但它是解析结果的异常映射,请参见:https://cwiki.apache.org/WW/exception-handling.html
我不确定,但我会手动打印出我想要的,#session是可迭代项目的地图,所以以下内容应该有效(未经测试):
<h1>From Session</h1>
<s:iterator value="#session">
Session Key: <s:property/>
<ol>
<s:iterator>
<li><s:parameter/></li>
</s:iterator>
</ol>
</s:iterator>
你需要为#application,#request,#page ...无论如何做。
如果你不介意json,一个更简单的方法就是使用json结果类型(使用struts2-json插件)创建一个带有所有“Aware”接口的动作,这真的很棒这是json插件将序列化这些对象的所有公共成员,无论嵌套有多深。