这是我的JSF文件头:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<h:head>
<meta http-equiv="content-type" content="text/html;charset=iso-8859-1"/>
<title>#{txt.TXT_TITLE_LOGIN}</title>
<link rel="stylesheet" type="text/css" href="scripts/styles.css"/>
<link rel="shortcut icon" href="./images/favicon.ico"></link>
<script src="./scripts/scripts.js" type="text/javascript"/>
</h:head>
<body...
当我打开页面时,样式没有加载,看起来很难看,Firebug显示如下:
<link href="scripts/styles.css" type="text/css" rel="stylesheet">
The resource from this URL is not text: http://localhost:8080/EWC/scripts/styles.css
</link>
…但文件在那里,在位置/EWC/scripts。
当我打开一些其他页面非常相同的标题都是好的。然后我回到这个页面,它也很好。但是,当这个页面在清空浏览器现金后第一次加载时,又会发生这种情况。
出什么事了?
已解析
似乎问题与会话到期时的授权重定向有关,但在提交JSF表单时不起作用,页面保持不变。
下面的代码没有捕获css
文件请求,所以它们通过gotoLogin()
转发到登录页面(如果用户没有登录)。
if( requestURI.startsWith(req.getContextPath() + ResourceHandler.RESOURCE_IDENTIFIER) )
chain.doFilter(request, response);
return;
else
gotoLogin(null, request, response);
return;
我添加了
if( requestURI.endsWith("css") )
chain.doFilter(request, response);
return;
…
正如BalusC所说,我应该在标题中使用<h:outputStylesheet>
, <h:outputScript>
和<h:graphicImage>
而不是<link>
, <script>
和<img>
,这将永远不会发生。