HOWTO通过struts2中的“result”标记设置参数,并在生成的模板jsp中检索它

时间:2012-03-07 19:24:52

标签: jsp struts2 scope jsp-tags

我有一个工作流程,我需要渲染一个异常页面。但是这个异常页面是通用的,可以从各种情况调用。我需要在每个异常页面中显示一些自定义文本。所以我想我可以在结果标签中设置一些“参数”。它将在最终的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" />

他们都没有奏效。如果你们可以指出我正确的方向,将不胜感激。还有一种方法可以打印当前上下文中包含的所有可用变量。会话,页面,请求范围?

更新 我最终通过在父操作中设置变量来解决问题,该操作最初触发了异常。我原本不想这样做,因为我不想污染父动作,但我修改了我的模板以处理正常的事物流以利用新变量。

1 个答案:

答案 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插件将序列化这些对象的所有公共成员,无论嵌套有多深。