自定义PhaseListener在jsf 2中调用两次

时间:2013-08-28 13:01:33

标签: jsf-2

我正在使用JSF 2.0中的PhaseListener。但它的方法每次都被调用两次。

@Override
public void beforePhase(PhaseEvent arg0) {
    System.out.println("Start Phase "+arg0.getPhaseId()+" here the value "+ ++i +" object "+this);  
}

和输出就像这样

Start Phase RESTORE_VIEW 1 here the value 1 object com.phaseListener.MyPhaseListener@cc8c29
Start Phase RESTORE_VIEW 1 here the value 1 object com.phaseListener.MyPhaseListener@106054a

每次被两个不同的对象调用时。

请让我知道,为什么会这样???

3 个答案:

答案 0 :(得分:5)

如果这有助于某人搜索此问题。

就我而言,我从Glassfish 3迁移到Tomcat 7,我注意到我的自定义阶段监听器被注册两次导致重复的日志条目。

在我的web.xml中,我有一个ConfigureListener,它是Glassfish 3所必需的,但会在Tomcat 7上触发第二次注册:

<listener>
    <listener-class>com.sun.faces.config.ConfigureListener</listener-class>
</listener>

我只是删除了这个块,它解决了这个问题。

答案 1 :(得分:1)

这是因为您已在JSF应用程序中两次注册了阶段侦听器。对此而言,“为什么”反过来又不具有建设性的责任。如果您对同一个阶段监听器被注册两次感到困扰,只需删除第二个注册。

答案 2 :(得分:0)

如果您使用的是Tomcat 7.0.4x,则会出现此问题。尝试将Tomcat降级到至少7.0.39或更低。问题很可能得到解决。我仍然不知道原因,但它的工作原理。希望它有所帮助。