【问题标题】:Why jsp: tags are not parsed?为什么jsp:标签不被解析?
【发布时间】:2010-07-28 13:26:39
【问题描述】:

我有这个login.xhtml JSF 页面:

<?xml version="1.0"?>
<jsp:root version="2.0"
  xmlns:jsp="http://java.sun.com/JSP/Page"
  xmlns:f="http://java.sun.com/jsf/core"
  xmlns:h="http://java.sun.com/jsf/html">
<jsp:directive.page contentType="text/html"/>
<f:view>
  <h:inputText value="#{userBean.id}"/>
</f:view>
</jsp:root>

输出 HTML 包含正确呈现的 &lt;input&gt; 标记,但 &lt;jsp:*&gt; 保持不变。似乎 JSF 只是不理解它们。为什么?

【问题讨论】:

    标签: java jsf jsf-2


    【解决方案1】:

    您使用的是 JSF 2.0,并且该文件具有 *.xhtml 扩展名。您实际上是在使用 Facelets 作为视图技术,而不是 JSP。 Facelets 是JSP 的继承者。不能将 Facelets 与 JSP 标记混合使用。摆脱所有&lt;jsp:&gt; 标签,它们毫无价值,并且永远无法在Facelets 页面中工作。仅当您将文件命名为 *.jsp 时才会解析 JSP 标记,该文件将被 servletcontainer 的内置 JspServlet 拾取。但是由于您将 JSF 2.0 与 Facelets 一起使用,因此您已经拥有了用于这项工作的 FacesServlet。忘记 JSP :)

    您的 XHTML 文件应如下所示:

    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml"
        xmlns:f="http://java.sun.com/jsf/core"
        xmlns:h="http://java.sun.com/jsf/html">
        <h:head>
            <title>Title</title>
        </h:head>
        <h:body>
            <h:inputText value="#{userBean.id}"/>
        </h:body>
    </html>
    

    请注意,您希望将该输入组件放在 &lt;h:form&gt; 中,但我敢打赌这只是一个测试示例。

    还要注意&lt;!DOCTYPE html&gt; 在这里是perfectly legit。您不需要 XHTML 文档类型。 Facelets 将负责设置正确的 text/html 内容类型、UTF-8 字符编码等。

    另见:

    【讨论】:

      【解决方案2】:

      您使用的 JSP 标记不会生成任何 HTML。

      contentType 指令影响标题,而不是 HTML。

      【讨论】:

      • 但为什么它们会留在我的 HTML 输出中?
      【解决方案3】:

      你需要激活JSF,一个常见的方法是把浏览器指向login.jsf或者faces/login.xhtml。如果您不这样做,则该文件未解析地提供给浏览器

      【讨论】:

      • 他看到的是未解析的 JSP 标签,而不是 JSF 标签。
      猜你喜欢
      • 2011-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-12
      相关资源
      最近更新 更多