为视图配置的 ICEfaces /index.xhtml 但 h:head 和 h:body 组件是必需的

ICEfaces configured for view /index.xhtml but h:head and h:body components are required

我正在尝试将 ICEFaces ACE 组件库集成到我的项目中。我有以下观点:

<!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:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core">
<head>

<h:outputStylesheet library="org.icefaces.component.skins"
    name="rime.css" />

<f:loadBundle basename="resources.application" var="msg" />
<title>
        <h:outputText value="#{msg.templateTitle}" />
</title>
</head>

<body>
    <div id="content">
        <h:form>
            <ace:dataTable var="user" value="#{userBean.users}"
                paginator="true" rows="50" selectionMode="multiple">
                <ace:column headerText="users">
                    <ace:row>#{user}</ace:row>
                </ace:column>
            </ace:dataTable>
        </h:form>
    </div>

</body>

</html>

很遗憾,显然没有加载 JavaScript / CSS,因此组件无法正确显示。此外,服务器记录此:

ICEfaces configured for view /index.xhtml but h:head and h:body components are required

这有关系吗?

您需要使用 JSF <h:head><h:body> 组件,而不是普通的 HTML <head><body>。这样 JSF 和任何 JSF 组件库将能够以编程方式在其中自动包含 CSS/JS 资源。

例如

<!DOCTYPE html>
<html lang="en"
    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"
>
    <f:loadBundle basename="resources.application" var="msg" />

    <h:head>
        <title>#{msg.templateTitle}</title>
    </h:head>

    <h:body>
        ...
    </h:body>
</html>

请注意,这样您也不再需要 <h:outputStylesheet>

另请参阅:

  • One or more resources has the target of 'head' but not 'head' component has been defined within the view

与具体问题无关,你最好在faces-config.xml中声明resources.application<resource-bundle>,这样你就不会需要在所有视图中重复它。另请注意,您不一定需要 <h:outputText> 所有地方。 <head> 和以上所有内容还表明您正在根据 JSF 1.x 目标教程而不是 2.x 目标教程来学习 JSF。确保您使用正确的资源来学习。