Jsf tr:commandLink操作方法不会导航到下一页。而是重新加载同一页

Jsf tr:commandLink操作方法不会导航到下一页。而是重新加载同一页,jsf,myfaces,jsf-1.2,Jsf,Myfaces,Jsf 1.2,在我的JSF应用程序中,成功登录后,我将导航到我的应用程序主页,在那里我有一个注销链接 下面是注销的相关html链接 <div id="top_white"> <div style="float: right"><tr:form><tr:commandLink id="logout" action="#{Controller.Logout}"><img alt="logout" src="../../images/logout

在我的JSF应用程序中,成功登录后,我将导航到我的应用程序主页,在那里我有一个
注销
链接

下面是注销的相关html链接

<div id="top_white">
        <div style="float: right"><tr:form><tr:commandLink id="logout" action="#{Controller.Logout}"><img alt="logout" src="../../images/logout.gif"/></tr:commandLink></tr:form></div>
    </div>
在构造函数中,我在会话中检查userid,并将特定列表加载到用户

我还有一个
ServletFilter
,它在每个会话中检查一些id。如果找不到它,它将重定向到InvalidUser页面。我的筛选器映射到
/faces/jsp/*
,以便在会话中检查jsp文件夹中所有jsp的id

这是我的过滤器的
doFilter
方法

public void doFilter(ServletRequest req, ServletResponse res,
            FilterChain chain) throws IOException, ServletException {

            LOGGER.debug("In doFilter");
            HttpServletRequest request = (HttpServletRequest) req;
            HttpServletResponse response = (HttpServletResponse) res;
            HttpSession session = request.getSession(false);
            LOGGER.debug("request:" + request.getRequestURL().toString());
            try{
                if (session.getAttribute("id") != null) {
                    LOGGER.debug("id found:" + session.getAttribute("id"));
                    chain.doFilter(req, res); // id found, so just continue request.
                } 
            }catch(NullPointerException e){
                LOGGER.debug("No id found Exception: ", e);
                response.sendRedirect(properties.getProperty(INVALID_USER_REDIRECTURL, true)); // No id found, so redirect to Invalid user page.

            }

    }
我还添加了一个
PhaseListener
来调试JSF生命周期,该生命周期取自

第一次加载页面时,我看到以下服务器日志,其中只包含JSF生命周期的第一个和最后一个阶段

["http-bio-8090"-exec-114] DEBUG SessionFilter - In doFilter
["http-bio-8090"-exec-114] DEBUG SessionFilter - request:http://my homepageurl
["http-bio-8090"-exec-114] DEBUG SessionFilter - id found
["http-bio-8090"-exec-114] ERROR org.apache.myfaces.config.FacesConfigurator - Configuration objects do not support clean-up. Update aborted
["http-bio-8090"-exec-114] DEBUG LifeCycleListener - START PHASE RESTORE_VIEW(1)
["http-bio-8090"-exec-114] DEBUG LifeCycleListener - END PHASE RESTORE_VIEW(1)
["http-bio-8090"-exec-114] DEBUG org.apache.myfaces.lifecycle.LifecycleImpl - exiting from lifecycle.execute in RESTORE_VIEW(1) because getRenderResponse is true from one of the after listeners
["http-bio-8090"-exec-114] DEBUG LifeCycleListener - START PHASE RENDER_RESPONSE(6)
["http-bio-8090"-exec-114] INFO  org.apache.myfaces.config.annotation.DefaultLifecycleProviderFactory - Using LifecycleProvider org.apache.myfaces.config.annotation.AllAnnotationLifecycleProvider
["http-bio-8090"-exec-114] DEBUG Controller - id found in controller
["http-bio-8090"-exec-114] DEBUG DAOProperties - dao.properties loaded successfully
["http-bio-8090"-exec-114] DEBUG SvrConnection - In JNDI
["http-bio-8090"-exec-114] DEBUG DAO - Successfully connected to database
["http-bio-8090"-exec-114] DEBUG DAO - connection closed
["http-bio-8090"-exec-114] DEBUG Controller - successfully loaded the list for the user
["http-bio-8090"-exec-114] DEBUG LifeCycleListener - END PHASE RENDER_RESPONSE(6)
上面的日志和预期的一样,因为没有表单提交类型的东西。所以只列出了第一个和最后一个阶段

但真正的问题是,当我点击我在本文顶部提到的
注销
命令链接时

单击
注销
链接后,这里是服务器日志

["http-bio-8090"-exec-114] DEBUG SessionFilter - In doFilter
["http-bio-8090"-exec-114] DEBUG SessionFilter - request:http://my homepage url
["http-bio-8090"-exec-114] DEBUG SessionFilter - appid found
["http-bio-8090"-exec-114] ERROR org.apache.myfaces.config.FacesConfigurator - Configuration objects do not support clean-up. Update aborted
["http-bio-8090"-exec-114] DEBUG LifeCycleListener - START PHASE RESTORE_VIEW(1)
["http-bio-8090"-exec-114] DEBUG LifeCycleListener - END PHASE RESTORE_VIEW(1)
["http-bio-8090"-exec-114] DEBUG LifeCycleListener - START PHASE APPLY_REQUEST_VALUES(2)
["http-bio-8090"-exec-114] DEBUG LifeCycleListener - END PHASE APPLY_REQUEST_VALUES(2)
["http-bio-8090"-exec-114] DEBUG LifeCycleListener - START PHASE PROCESS_VALIDATIONS(3)
["http-bio-8090"-exec-114] DEBUG LifeCycleListener - END PHASE PROCESS_VALIDATIONS(3)
["http-bio-8090"-exec-114] DEBUG LifeCycleListener - START PHASE UPDATE_MODEL_VALUES(4)
["http-bio-8090"-exec-114] DEBUG LifeCycleListener - END PHASE UPDATE_MODEL_VALUES(4)
["http-bio-8090"-exec-114] DEBUG LifeCycleListener - START PHASE INVOKE_APPLICATION(5)
["http-bio-8090"-exec-114] DEBUG Controller - In LogOut
["http-bio-8090"-exec-114] DEBUG LifeCycleListener - END PHASE INVOKE_APPLICATION(5)
["http-bio-8090"-exec-114] DEBUG org.apache.myfaces.lifecycle.LifecycleImpl - exiting from lifecycle.execute in INVOKE_APPLICATION(5) because getRenderResponse is true from one of the after listeners
["http-bio-8090"-exec-114] DEBUG LifeCycleListener - START PHASE RENDER_RESPONSE(6)
["http-bio-8090"-exec-114] DEBUG LifeCycleListener - END PHASE RENDER_RESPONSE(6)
["http-bio-8090"-exec-116] DEBUG SessionFilter - In doFilter
["http-bio-8090"-exec-116] DEBUG SessionFilter - request:http://my homepage url
["http-bio-8090"-exec-116] DEBUG SessionFilter - No id found Exception:
java.lang.NullPointerException
从上面的日志中,正如预期的那样,我的操作方法在
INVOKE_应用程序中被调用,我的控制器的
Logout()
方法被调用,会话无效,字符串
loggedout
被返回

我在
faces config.xml

<navigation-rule>
    <from-view-id>/jsp/Services.jsp</from-view-id>
    <navigation-case>
      <from-outcome>loggedout</from-outcome>
      <to-view-id>/others/Logout.jsp</to-view-id>
    </navigation-case>
  </navigation-rule>

/jsp/Services.jsp
loggedout
/其他/Logout.jsp
但此
导航规则不执行。相反,在
RENDER\u RESPONSE
阶段,它尝试重新加载我的同一主页url。显然,它在会话中没有导致抛出
NullPointerException的
id

我在上面给出的各个文件夹中都有jsp,我使用的是JSF1.2和myFaces 1.2.9

1) 为什么导航案例不执行

2) 为什么它再次重新加载我的主页url


请找人帮忙。

我发现这是JSF中的注销问题。tr:commandLink没有问题

我在这里读了一些关于JSF注销问题的帖子,并实现了相同的功能


它按预期工作。

我发现这是JSF中的注销问题。tr:commandLink没有问题

我在这里读了一些关于JSF注销问题的帖子,并实现了相同的功能


它按预期工作。

嘿,斯雷拉姆!你能不能更具体地说明一下你的决定。在重新部署到Tomcat之后,我在一个旧的JSF项目上得到了“ERROR org.apache.myfaces.config.FacesConfigurator-配置对象不支持clean-up.Update-aborted”。最糟糕的是,它是某种随机的。有时我明白有时效果很好。嘿,斯雷拉姆!你能不能更具体地说明一下你的决定。在重新部署到Tomcat之后,我在一个旧的JSF项目上得到了“ERROR org.apache.myfaces.config.FacesConfigurator-配置对象不支持clean-up.Update-aborted”。最糟糕的是,它是某种随机的。有时我明白有时它很好用。
<navigation-rule>
    <from-view-id>/jsp/Services.jsp</from-view-id>
    <navigation-case>
      <from-outcome>loggedout</from-outcome>
      <to-view-id>/others/Logout.jsp</to-view-id>
    </navigation-case>
  </navigation-rule>