Jsf 为什么clear cache不适用于所有浏览器?
我有一个JSF应用程序,您可以在其中输入2个数字(index.xhtml),当您单击“添加”按钮时,这些数字被添加,结果显示在一个新页面(resultado.xhtml)中 我想做的是,当您插入2个数字时,单击“添加”按钮并转到resultado.xhtml,如果您返回index.xhtml,单击浏览器中的“返回”按钮,inputText字段必须为空,并且不包含以前插入的值。问题是它可以与Firefox一起使用,但不能与Chromium和Konqueror浏览器一起使用。当我使用此浏览器并按下返回按钮时,插入的数字将显示在inputText中。如何使它与所有浏览器一起工作 我按照此链接实现了一个servlet过滤器以清除缓存: index.xhtmlJsf 为什么clear cache不适用于所有浏览器?,jsf,caching,browser,Jsf,Caching,Browser,我有一个JSF应用程序,您可以在其中输入2个数字(index.xhtml),当您单击“添加”按钮时,这些数字被添加,结果显示在一个新页面(resultado.xhtml)中 我想做的是,当您插入2个数字时,单击“添加”按钮并转到resultado.xhtml,如果您返回index.xhtml,单击浏览器中的“返回”按钮,inputText字段必须为空,并且不包含以前插入的值。问题是它可以与Firefox一起使用,但不能与Chromium和Konqueror浏览器一起使用。当我使用此浏览器并按下返
<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() {
}
}