'正在开发一个 JSF 2 项目。我已将 login.xhtml 页面定义为 web.xml 中的入口页面
<welcome-file-list>
<welcome-file>login.xhtml</welcome-file>
</welcome-file-list>
我还有一个过滤器来检查用户是否登录
@WebFilter(filterName = "loginCheckFilter", urlPatterns={"/*"})
public class LoginCheckFilter implements Filter
{
@Inject
private LoginStatus loginStatus;
public void do Filter(...)
{
try{
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
String path = req.getRequestURI();
if(StringUtils.isNotBlank(path)
&& StringUtils.contains(path, ".xhtml")
&& !StringUtils.endsWith(path, "login.xhtml"))
{
if(loginStatus == null
|| !loginStatus.isLoggedIn())
{
res.sendRedirect(req.getContextPath() + "/login.xhtml");
}
else
{
chain.doFilter(request, response);
}
}
else
{
chain.doFilter(request, response);
}
}catch (Exception ex)
{
log.error(ex);
}
}
.... ....
}
我的 css 文件以以下样式引用:
<link href="css/styles.css" rel="stylesheet" type="text/css"/>
一切正常,直到我将 css 引用样式更改为 JSF 2 资源处理程序 ( http://www.mkyong.com/jsf2/resources-library-in-jsf-2-0/ )。我已将所有 css 文件复制到资源文件夹下,并提供了库名称和版本号。所以现在我引用css如下:
<h:outputStylesheet library="default" name="css/styles.css"/>
更改后,login.xhtml 不再呈现样式表。我在 login.xhtml 页面之后有一个 welcome.xhtml 页面,除了核心内容外,它的结构几乎相同,但这个页面呈现得非常好。我已经刷新了 login.xhtml 仍然没有呈现。但是一旦我登录,前进到下一页,然后回到 login.xhtml,然后刷新,就会呈现样式。此外,如果我取消 loginCheckFilter,login.xhtml 将呈现样式表。那么,如果有人遇到类似的情况并知道如何解决呢?谢谢!