【问题标题】:Custom PhaseListener called twice in jsf 2自定义 PhaseListener 在 jsf 2 中调用了两次
【发布时间】:2013-08-28 13:01:33
【问题描述】:

我在 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

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

请告诉我,为什么会这样??

【问题讨论】:

    标签: jsf-2


    【解决方案1】:

    如果这有助于有人在谷歌上搜索这个问题。

    在我的例子中,我从 Glassfish 3 迁移到 Tomcat 7,我注意到我的自定义阶段侦听器被注册了两次导致重复的日志条目。

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

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

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

    【讨论】:

      【解决方案2】:

      这是因为您在 JSF 应用程序中注册了两次阶段侦听器。反过来,“为什么”也不能建设性地回答。如果您对同一阶段监听器被注册两次感到困扰,只需删除第二次注册即可。

      【讨论】:

      • 嗨,BalusC,我把你的博客作为参考,我希望你能回答,谢谢你的回答。虽然我没有注册过两次相位监听器。我的 faces-config 设置是 com.phaseListener.MyPhaseListener
      • 不太可能的原因是您的运行时类路径中有两个 JSF 实现。
      • 在我的情况下......它也被调用了两次......是否担心性能相关问题,是否会降低应用程序的性能?
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2013-04-21
        • 2014-08-24
        • 1970-01-01
        • 1970-01-01
        • 2019-06-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多