Jsf 为什么clear cache不适用于所有浏览器?

Jsf 为什么clear cache不适用于所有浏览器?,jsf,caching,browser,Jsf,Caching,Browser,我有一个JSF应用程序,您可以在其中输入2个数字(index.xhtml),当您单击“添加”按钮时,这些数字被添加,结果显示在一个新页面(resultado.xhtml)中 我想做的是,当您插入2个数字时,单击“添加”按钮并转到resultado.xhtml,如果您返回index.xhtml,单击浏览器中的“返回”按钮,inputText字段必须为空,并且不包含以前插入的值。问题是它可以与Firefox一起使用,但不能与Chromium和Konqueror浏览器一起使用。当我使用此浏览器并按下返

我有一个JSF应用程序,您可以在其中输入2个数字(index.xhtml),当您单击“添加”按钮时,这些数字被添加,结果显示在一个新页面(resultado.xhtml)中

我想做的是,当您插入2个数字时,单击“添加”按钮并转到resultado.xhtml,如果您返回index.xhtml,单击浏览器中的“返回”按钮,inputText字段必须为空,并且不包含以前插入的值。问题是它可以与Firefox一起使用,但不能与Chromium和Konqueror浏览器一起使用。当我使用此浏览器并按下返回按钮时,插入的数字将显示在inputText中。如何使它与所有浏览器一起工作

我按照此链接实现了一个servlet过滤器以清除缓存:

index.xhtml

    <h:head>
        <h:outputStylesheet library="css" name="styles.css"  />
    </h:head>
    <h:body>
        <h:form>   

            <!--Number 1 -->
            <h:inputText id="num1" label="num1" required="true" size="5" maxlength="5" 
                    styleClass="#{component.valid ? '' : 'validation-failed'}"
                    value="#{sumaManagedBean.number1}"
                    requiredMessage="You must enter a value"/>
            </h:inputText>
            <h:message for="num1" />


            <!--Number 2-->
            <h:inputText id="num2" label="num2" required="true" size="5" maxlength="5"
                     styleClass="#{component.valid ? '' : 'validation-failed'}"
                     value="#{sumaManagedBean.number2}"
                     requiredMessage="You must enter a value">         
            </h:inputText>
            <h:message for="num2" />

                <h:commandButton value="Add" action="#{sumaManagedBean.direccionPagina()}"/>
        </h:form>


</h:body>  
NoCacheFilter.java

package filters;

import java.io.IOException;
import javax.faces.application.ResourceHandler;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


@WebFilter("/*") //Apply a filter for all URLs
public class NoCacheFilter implements Filter {

    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) res;

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

        chain.doFilter(req, res);
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }
    @Override
    public void destroy() {
    }
}

您真的是在暗示webbrowser从缓存加载页面,而不是触发HTTP请求吗?您是否看过HTTP流量监视器,或者只是猜测/假设?我想这只是又一个关闭自动完成的例子。谢谢你的回答,现在我打开了自动完成,它在Firefox和Chromium中运行良好,但在Konqueror中运行不好(返回时,先前插入的值仍在inputText中)。你知道为什么吗?你打开了自动完成功能?我想@BalusC是想把它关掉(如果他不是说我要吃掉我的帽子的话)哦,是的,你是对的。我关掉了。我认为Konqueror不支持autocomplete=“off”(可能我错了),也没有开发人员网络选项来查看页面是从服务器还是缓存中获取的。我认为浏览器缓存也不会缓存您以前键入的值。它只是浏览器的一个功能,在返回时跟踪输入历史,这与缓存无关。我不相信有什么真正的方法可以阻止浏览器这么做。
package controllers;

//Imports

    @ManagedBean
    @RequestScoped
    public class SumaManagedBean implements Serializable
    {

        boolean m_binsertCorrecto; 

        int number1;
        int number2;

        public SumaManagedBean() {      

        }


        //Getters and Setters
        public int getNumber1() {
            return number1;
        }

        public void setNumber1(int number1) {
            this.number1 = number1;
        }

        public int getNumber2() {
            return number2;
        }

        public void setNumber2(int number2) {
            this.number2 = number2;
        }


        //
        public boolean isInsertCorrecto() 
        {
            return m_binsertCorrecto;
        }

        public void setInsertCorrecto(boolean bInsertCorrecto) 
        {
            this.m_binsertCorrecto = bInsertCorrecto;
        } 



        public int calcularResultado()
        {
            int resultado;

            resultado = number1 + number2;

            return resultado;
        }

        public String direccionPagina()
        {
            String direccion = "/resultado";

            setInsertCorrecto(true);

            return direccion;
        }

    }
package filters;

import java.io.IOException;
import javax.faces.application.ResourceHandler;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


@WebFilter("/*") //Apply a filter for all URLs
public class NoCacheFilter implements Filter {

    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) res;

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

        chain.doFilter(req, res);
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }
    @Override
    public void destroy() {
    }
}