JSF 2 浏览器不缓存资源

Ivá*_*ván 1 jsf caching primefaces jsf-2

我有一个 JSF 组件,它通过 ajax 请求通过按钮进行刷新。该组件具有按值顺序变化的图像。如果我查看网络请求,我可以看到我的浏览器没有缓存图像,而是在每次单击时请求它们。这会导致视图渲染中出现某种“弹出”现象。

我想通过缓存图像来加快刷新时间和渲染时间。我尝试在 GET 方法上使用 RequestFilter 将 Cache-Control 标头设置为“public”,但不起作用。

任何想法?

延迟指示器

<!-- IMPLEMENTATION -->
<composite:implementation>
    <h:panelGrid columns="2">
        <c:choose>
            <c:when test="#{cc.attrs.latencia ge cc.attrs.umbralAlto}">
                <p:graphicImage value="#{resource['images:rojo.png']}"/>
            </c:when>
            <c:when test="#{(cc.attrs.latencia lt cc.attrs.umbralAlto) and (cc.attrs.latencia ge cc.attrs.umbralMedio)}">
                <p:graphicImage value="#{resource['images:ambar.png']}"/>
            </c:when>
            <c:otherwise>
                <p:graphicImage value="#{resource['images:verde.png']}"/>
            </c:otherwise>
        </c:choose>
        <h:outputText value="#{cc.attrs.latencia} ms."/>
    </h:panelGrid>
</composite:implementation>
Run Code Online (Sandbox Code Playgroud)

示例.xhtml

<h:body>
    <h:form id="miForm">
        <h:commandButton id="boton" value="Generar Latencia">
            <f:ajax render="@form" event="click" listener="#{latencyBean.actualizarLatencia()}"/>
        </h:commandButton>
        <miscomponentes:LatencyIndicator latencia="#{latencyBean.latencia}"/>
    </h:form>
</h:body>
Run Code Online (Sandbox Code Playgroud)

Mic*_*chi 6

这可能有多种原因:

  • 您是否通过中的Development上下文参数 将项目阶段设置为?因为在这种情况下 JSF 禁用了缓存。将参数设置为(默认值)应该启用缓存。javax.faces.PROJECT_STAGEweb.xmlProduction
  • 您使用的 Mojarra 版本低于 2.1.21 吗?旧版本中存在一个阻止缓存的错误。在这种情况下,您可以尝试新版本。