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?
我使用带有 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?