struts2 ognl servlet上下文

struts2 ognl servlet上下文,struts2,ognl,Struts2,Ognl,我想在Struts 2应用程序的每个页面上显示一些常量,如APPVERSION、APPNAME和APPREV 有了这些需求,我认为最好将信息引入servletContext,并在部署应用程序时加载它 我创建了一个侦听器,它实现了ServletContextListener: 公共类ApplicationNitListenerImpl扩展了GenericVsService实现ApplicationNitListener、ServletContextListener{ @凌驾 公共无效上下文已销毁(

我想在Struts 2应用程序的每个页面上显示一些常量,如APPVERSION、APPNAME和APPREV

有了这些需求,我认为最好将信息引入servletContext,并在部署应用程序时加载它

我创建了一个侦听器,它实现了
ServletContextListener

公共类ApplicationNitListenerImpl扩展了GenericVsService实现ApplicationNitListener、ServletContextListener{
@凌驾
公共无效上下文已销毁(ServletContextEvent sce){
}
@凌驾
public void contextInitialized(ServletContextEvent sce){
ServletContext sc=sce.getServletContext();
sc.setAttribute(“appVer”,xxx.utils.VConstants.appVer);
sc.setAttribute(“appName”,xxx.utils.VConstants.appName);
sc.setAttribute(“approv”,xxx.utils.VConstants.approv);
}   
}
然后我在我的
web.xml
中添加了侦听器:


xxx.listeners.ApplicationNitListenerImpl
在我的平铺模板中,我添加了:

-
但我这里什么都没有

如果我从Struts 2操作中检索servletContext,我可以读取正确的值,因此这些值设置为ok

我做错了什么?

您可以使用

<s:property value="#attr.appName"/> - <s:property value="#attr.appVer"/>

我认为这应该有效;使用
#attr
应该搜索所有作用域(使用JSP EL,
${appName}
)。如果这两种方法都有效,那么比我最初想到的要容易得多<代码>当然,这需要启用静态方法调用。。。这将直接从jsp执行操作中的操作。嗨,Dave,看起来#attr按预期工作。我不明白的是,为什么这个应用程序不起作用。ServletContext与应用程序范围不等效?ps将其作为答案提交给我,以便我批准。@DaveNewton如果您有时间了解它为什么不起作用,那将很有趣。我认为#应用程序应该相当于@com.opensymphony.xwork2。ActionContext@getContext()应用程序为什么投反对票?OP做了一些工作,这对其他人来说是一个很好的例子,最初尝试的技术是合乎逻辑的,但由于某些原因不起作用。
${appName}  -  ${appVer}