我写了以下facelet index.xhtml
:
<?xml version='1.0' encoding='UTF-8' ?>
<!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:myCC="http://xmlns.jcp.org/jsf/composite/hui"
xmlns:h="http://xmlns.jcp.org/jsf/html">
<head>
<h:outputStylesheet name="css/centering.css"/>
</head>
<body>
<div style="centerClass">
<mycc:logpass/>
</div>
</body>
</html>
当我从浏览器获取此facelet的内容时
One or more resources have the target of 'head', but no 'head' component has been defined within the view.
所以来自控制台的html如下:
<head>
<style type="text/css"></style>
<script type="text/javascript" async="" src="http://www.google-analytics.com/ga.js"></script>
<script type="text/javascript" async="" src="http://cdn.mxpnl.com/libs/mixpanel-2.1.min.js"></script>
<style type="text/css"></style>
</head>
但如果我写
<?xml version='1.0' encoding='UTF-8' ?>
<!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:mycc="http://xmlns.jcp.org/jsf/composite/hui"
xmlns:h="http://xmlns.jcp.org/jsf/html">
<head>
<link href="css/centering" rel="stylesheet" type="text/css"/>
</head>
<body>
<div style="centerClass">
<mycc:logpass/>
</div>
</body>
</html>
没有此错误消息。为什么呢?
答案 0 :(得分:2)
使用<h:head>
代替<head>
<head>
标记只是一个html标记,它在JSF组件树中没有位置。
<h:head>
标记是JSF标记。 <h:outputStylesheet>
也是一个JSF标记,可以在<h:head>
标记内解析。
此外,<h:outputStylesheet>
在html中有对应的<link>
。 <h:outputStylesheet>
旨在从WebContent/resources
目录中读取静态文件。因此,您应该将css folter放到此目录中,然后将读取样式表。如果使用<h:outputStylesheet>
,则将其从JSF解释为html标记,哪些浏览器可以按以下格式理解html标记。请注意/ProjectRoot/javax.faces.resource
前缀。
<link type="text/css" rel="stylesheet" href="/ProjectRoot/javax.faces.resource/css/centering.css.xhtml" />
Standart html标签也可以在JSF标签内使用。这就是为什么你没有看到html标签的任何问题。