gpt4 book ai didi

css - Servlet 过滤器无法访问基于 JSF 的应用程序中的 css、资源和 primefaces

转载 作者:行者123 更新时间:2023-11-28 10:32:11 25 4
gpt4 key购买 nike

<分区>

我有一个 ServletFilter,我想通过转发将我的应用程序置于维护模式,我什至尝试包含一个 facelet 页面,但无论哪种方式,我都无法让 facelet 页面包含资源(图像、css)

我知道这个问题Browser can't access/find relative resources like CSS, images and links when calling a Servlet which forwards to a JSP ,但该答案使用的是 jsp 页面,没有使用 h:head h:body,所以我从那篇文章中尝试过的东西没有得到它的工作。

public class OfflineFilter implements Filter {

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
LocalTime now = LocalTime.now();
LocalTime start = LocalTime.parse("06:45:00");
LocalTime stop = LocalTime.parse("07:00:00");

// Want to go into maintenance mode every morning between 6:45 and 7:00 am
if (now.isAfter(start) && now.isBefore(stop)) {
// ((HttpServletResponse) response).sendRedirect(((HttpServletRequest) request).getContextPath() + "/maintenance.xhtml");
request.getRequestDispatcher("maintenance.xhtml").forward(request, response);
// request.getRequestDispatcher("maintenance.xhtml").include(request, response);
} else {
chain.doFilter(request, response);
}
}
}

维护.xhtml

<h:head>
<title>Maintenance</title>
<h:outputStylesheet name="#{pageContext.request.contextPath}/css/screen.css" />
</h:head>

<h:body>
<h:outputStylesheet name="#{pageContext.request.contextPath}/css/screen.css" />
test 0<img src="/AppName/resources/gfx/bug.png" />
test 1<h:graphicImage styleClass="bug_logo" name="gfx/bug.png" />
test 2<h:graphicImage styleClass="bug_logo" name="/gfx/bug.png" />
test 3<h:graphicImage styleClass="bug_logo" name="resources/gfx/bug.png" />
test 4<h:graphicImage styleClass="bug_logo" name="#{pageContext.request.contextPath}/gfx/bug.png" />
<p:clock pattern="HH:mm:ss a" mode="server" />

即使只使用纯 html,我也无法正常工作。

此外,我什至认为我的时钟小部件都没有加载 Primefaces 样式表。

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui" xmlns:o="http://omnifaces.org/ui"
xmlns:of="http://omnifaces.org/functions">

编辑

查看页面源代码,我看到了 <img src="/AppName/javax.faces.resource/gfx/bug.png.xhtml"

但我的过滤器匹配 *.xhtml原来我匹配的是 url /*更改为 *.xhtml修复了纯 html 页面中的问题,但仍然无法使 facelet 工作。

<filter-mapping>
<filter-name>OfflineFilter</filter-name>
<url-pattern>*.xhtml</url-pattern>
</filter-mapping>

那么问题来了,<h:graphicImage正在将 .xhtml 添加到我的所有资源中,它们被排除在外。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com