xmlns:ui 标记未在 JSPX 页面中正确呈现

xmlns:ui tags doesn't render properly in a JSPX page

我使用带有 trinidad 标记库的 apache myfaces-2.0.23 在 eclipse 中创建了一个新的 JSF 项目。我的 Login.jspx 如下所示,

<jsp:root xmlns="http://www.w3.org/1999/xhtml"
    xmlns:jsp="http://java.sun.com/JSP/Page" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:h="http://java.sun.com/jsf/html" version="2.0"
    xmlns:tr="http://myfaces.apache.org/trinidad"
    xmlns:trh="http://myfaces.apache.org/trinidad/html"
    xmlns:c="http://java.sun.com/jstl/core"
    xmlns:ui="http://java.sun.com/jsf/facelets">
   <jsp:directive.page language="java"
        contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" />
    <jsp:text>
        <![CDATA[ <?xml version="1.0" encoding="ISO-8859-1" ?> ]]>
    </jsp:text>
    <jsp:text>
        <![CDATA[ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> ]]>
    </jsp:text>
<ui:composition template="templates/templateLayout.jspx">
<f:view>
    <ui:define name="body">
        <tr:outputLabel value="User Name: "></tr:outputLabel>
        <tr:inputText required="true" value="#{login.userName}"></tr:inputText>
        <tr:spacer height="5"></tr:spacer>
        <tr:outputLabel value="Password: "></tr:outputLabel>
        <tr:inputText required="true" value="#{login.password}"></tr:inputText>
        <tr:spacer height="10"></tr:spacer>
        <tr:commandButton text="Login" action="#{loginAction.login}"></tr:commandButton>
    </ui:define>
</f:view>
</ui:composition>
</jsp:root>

在 JBoss 和 运行 中部署应用程序时,我能够看到文本框和按钮。但是templateLayout内容不显示!

当我在浏览器中获取源代码时,ui:composition 标签按原样呈现。

<?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"> 
    **<ui:composition** template="templates/templateLayout.jspx"><ui:define name="onPageLoadJavascript"/><ui:defin`enter code here`e name="pageSpecificJavascript"/><ui:define name="body">........................................................

这是怎么造成的,我该如何解决?

您的错误在于您创建了旧版 JSPX 页面而不是现代 Facelets (XHTML) 页面。 <ui:xxx> 标签仅在 Facelets 中有效(就像 <jsp:xxx> 标签仅在 JSP(X) 中有效)。此外,JSF 2.x 兼容的组件库(如 PrimeFaces 2+ 和 RichFaces 4+)不再支持 JSP(X),因为它自 JSF 2.0 以来已被弃用。

您有 2 个选择:

  • 只使用 <jsp:xxx> 标签。它只是不支持高级模板。
  • 使用 Facelets (XHTML) 而不是 JSP(X)。

由于 JSP 自 JSF 2.0 以来已被弃用并被 Facelets 取代,因此第二种选择显然是首选。不要忘记去掉所有 <jsp:xxx> 标签,否则你会在另一边面临同样的问题。

另请参阅:

  • Why Facelets is preferred over JSP as the view definition language from JSF2.0 onwards?
  • How to include another XHTML in XHTML using JSF 2.0 Facelets?