我有这个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/