Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 2 如何避免在点击按钮或链接时页面过期。当我为表单上的任何按钮单击或链接返回null时,页面将过期_Jsf 2 - Fatal编程技术网

Jsf 2 如何避免在点击按钮或链接时页面过期。当我为表单上的任何按钮单击或链接返回null时,页面将过期

Jsf 2 如何避免在点击按钮或链接时页面过期。当我为表单上的任何按钮单击或链接返回null时,页面将过期,jsf-2,Jsf 2,我使用的过滤器,检查用户是否登录,然后不缓存上一页。代码是这样的 public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException { .... if (isRegisteredUser.equalsIgnoreCase(("1"))) { sess

我使用的过滤器,检查用户是否登录,然后不缓存上一页。代码是这样的

public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)
        throws IOException, ServletException {
    ....
    if (isRegisteredUser.equalsIgnoreCase(("1"))) {

        sessionID = UUID.randomUUID().toString();

        session.setMaxInactiveInterval(1800); 

        Cookie userCookie = new Cookie("userCookie", "loginUser");
        userCookie.setPath("/");
        httpServletResponse.addCookie(userCookie);

        Cookie sessionCookie = new Cookie("WITSessionCookie", sessionID);
        sessionCookie.setMaxAge(60*30);  
        sessionCookie.setPath("/");    
        httpServletResponse.addCookie(sessionCookie);

        if (!httpServletRequest.getRequestURI().startsWith(httpServletRequest.getContextPath() + ResourceHandler.RESOURCE_IDENTIFIER)) { // Skip JSF resources (CSS/JS/Images/etc)
            httpServletResponse.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
            httpServletResponse.setHeader("Pragma", "no-cache"); // HTTP 1.0.
            httpServletResponse.setDateHeader("Expires", 0); // Proxies.
        }

        filterChain.doFilter(httpServletRequest, httpServletResponse);

    }
    ...

} //end of doFilter()
但问题是,如果用户在任何页面上单击任何按钮或链接,我为该操作返回null,然后单击浏览器后退按钮,则表示页面过期。我怎样才能防止这种情况?很好,页面没有缓存,但是为什么当我单击任何按钮或链接并为该操作返回null时,页面将过期?
谢谢,当最终用户试图重新发送未缓存在浏览器中的POST请求时,这是正常的和指定的行为。您需要实现post-redirect-get模式。将重定向发送到操作方法中的目标页面。或者,更好的做法是将其改为ajax提交。顺便说一句,不管您是否通过返回null返回到同一视图。

您的会话和cookie处理非常奇怪。你似乎错过了一些基本的概念……:你说的基本概念是什么意思?你能告诉我基本概念吗?是的,你是对的。事实上我只是从章节中读到的。但这是针对servlet和JSP的。现在我正在使用JSF。显然,会话跟踪是相同的,但我缺乏概念。如何实现后重定向get模式?因此,如果我的操作返回null,则页面不会过期。是的,我回到了同样的观点。假设我有一个faq.xhtml页面。因此,我检查验证,如果任何验证失败,那么我返回null.HHmm您的意思是说,我重定向用户,而不是返回null。我应该使用类似于return MyDashboard?faces redirect=true的内容,而不是使用return null。它是?这是重定向到同一页…谢谢。是的,你是对的。我没有返回null,而是使用了如下内容//returnnull;return news和announceaddupdate?faces redirect=true;i、 e,重定向到同一页。现在,当我点击后退按钮时,pageExpires消息消失了。谢谢: