在Struts 2.x中使用Struts-Menu - MenuContextListener无法正常工作

时间:2011-05-21 17:35:53

标签: java struts2 listener tomcat6 apache-commons-digester

我已经彻底搜索了这个主题并打开了log4j的调试级别,但是MenuContextListener根本无法启动。这是我的信息:

我的web.xml文件

 <listener> 
    <listener-class>net.sf.navigator.menu.MenuContextListener</listener-class> 
 </listener> 

 <context-param>   
    <param-name>menuConfigLocation</param-name>   
    <param-value>/WEB-INF/classes/menu-config.xml</param-value>   
 </context-param> 

我的menu-config.xml文件

<?xml version="1.0" encoding="UTF-8" ?>

<MenuConfig>

<Displayers>
   <Displayer name="TabbedMenu" type="net.sf.navigator.displayer.TabbedMenuDisplayer" />
</Displayers>

<Menus>
   <Menu name="selectAction" title="Select Action" location="SelectAction">
       <Item name="report" title="Report" location="Report"/>
       <Item name="query" title="Query" location="Query"/>
       <Item name="listings" title="Listings" location="Listings"/>
   </Menu>
</Menus>

</MenuConfig>

我的log4j信息

May 21, 2011 1:02:33 PM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive myproject.war
context path = /myproject
log4j:ERROR Could not find value for key log4j.appender.R
log4j:ERROR Could not instantiate appender named "R".
log4j:ERROR Could not find value for key log4j.appender.TX
log4j:ERROR Could not instantiate appender named "TX".
log4j:ERROR Could not find value for key log4j.appender.R
log4j:ERROR Could not instantiate appender named "R".
log4j:ERROR Could not find value for key log4j.appender.R
log4j:ERROR Could not instantiate appender named "R".
log4j:ERROR Could not find value for key log4j.appender.R
log4j:ERROR Could not instantiate appender named "R".
log4j:ERROR Could not find value for key log4j.appender.R
log4j:ERROR Could not instantiate appender named "R".
log4j:ERROR Could not find value for key log4j.appender.R
log4j:ERROR Could not instantiate appender named "R".
log4j:ERROR Could not find value for key log4j.appender.R
log4j:ERROR Could not instantiate appender named "R".
log4j:ERROR Could not find value for key log4j.appender.R
log4j:ERROR Could not instantiate appender named "R".
log4j:ERROR Could not find value for key log4j.appender.R
log4j:ERROR Could not instantiate appender named "R".
2011-05-21 13:02:52 MenuContextListener [DEBUG] Starting struts-menu initialization
2011-05-21 13:02:52 MenuContextListener [DEBUG] using menuConfigLocation: /WEBINF/classes/menu-config.xml
May 21, 2011 1:02:52 PM org.apache.catalina.core.StandardContext start
SEVERE: Error listenerStart
May 21, 2011 1:02:52 PM org.apache.catalina.core.StandardContext start
SEVERE: Context [/myproject] startup failed due to previous errors
2011-05-21 13:02:52 MenuContextListener [DEBUG] destroying struts-menu...
May 21, 2011 1:02:52 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory docs
context path = /docs
May 21, 2011 1:02:52 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory examples
context path = /examples
May 21, 2011 1:02:53 PM org.apache.coyote.http11.Http11AprProtocol start
INFO: Starting Coyote HTTP/1.1 on http-8080
May 21, 2011 1:02:53 PM org.apache.coyote.ajp.AjpAprProtocol start
INFO: Starting Coyote AJP/1.3 on ajp-8009
May 21, 2011 1:02:53 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 35104 ms

所以你看到为这个监听器调用了contextInitialize,但该方法没有完成,因为在MenuContextListener中应该还有一个日志语句告诉我们成功或失败。然后我们突然调用了contextDestroyed,就是这样。

1 个答案:

答案 0 :(得分:2)

所以在任何地方都没有任何日志可以提供更多信息。无处!我找到问题的方法是我必须仔细梳理struts-main的源代码。我发现了什么?在MenuRepository.java中有一个commons-digester的导入。下议院沼气池?在任何文档中提到或在任何下载中包含哪些内容?我不使用公共沼气池。

这是我对此的看法,如果我错了,请任何人纠正我,或者确认这是否正确。回到struts 1.x编写时,commons-digester是struts包的一部分,为什么要在struts-menu文档中提到commons-digester呢?现在已不再是这种情况,所以必须单独下载公共消化器。所以我的结论是,需要有一些文档来说明如何将这个包与struts 2.x成功结合起来。

另外,任何人都可以给我任何2011年使用struts菜单的替代方案吗?我有一个菜单,当用户将鼠标悬停在菜单上时,该菜单会向右打开。这与struts-menu中包含的Velocity CoolWindows示例非常相似。