java - 为什么jsp : tags are not parsed?

标签 java jsf jsf-2

我有这个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 包含正确呈现的 <input>标签,但是 <jsp:*>保持不变。似乎 JSF 只是不理解它们。为什么?

最佳答案

您使用的是 JSF 2.0 并且文件具有 *.xhtml扩大。您实际上是在使用 Facelets 作为 View 技术,而不是 JSP。 Facelets 是 JSP 的继承者。您不能将 Facelets 与 JSP 标记混合使用。摆脱所有<jsp:>标记,它们毫无值(value),永远不会在 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>

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

另请注意 <!DOCTYPE html>perfectly legit这里。您不需要 XHTML 文档类型。 Facelets 会注意设置正确的 text/html内容类型,UTF-8字符编码等。

另见:

关于java - 为什么jsp : tags are not parsed?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3353283/

相关文章:

html - h :panelGroup and colspan making my table messed up

java - C std::string 作为带有 SWIG 的 Java 中的输出参数

html - 如何在 JSF 中设置本地化文本的格式

jsf-2 - Bean 验证在 JSF2.2 (Majorra 2.2.5) 下不起作用

spring - 在 Spring Boot 中找不到带有 @FacesComponent 的 JSF 自定义组件

jsf - 有条件地渲染复合组件中元素的属性

xml - 创建 RSS 提要 JSF 2.0?

java - Java HashMap 内部数据结构在重新散列过程中如何变化?

java - Apache CXF 2.0.12 到 2.2.7 升级问题

java - 在 .jar 和 eclipse 中使用相同的字符串计算查找资源