我有这个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只是不理解它们。为什么呢?
答案 0 :(得分:3)
您使用的是JSF 2.0,该文件的扩展名为*.xhtml
。您实际上使用Facelets作为视图技术,而不是JSP。 Facelets是JSP的继承者。您不能将Facelets与JSP标记混合使用。摆脱所有<jsp:>
标签,它们毫无价值,并且永远不会在Facelets页面中工作。只有在命名文件*.jsp
时才会解析JSP标记,该文件将由servletcontainer的内置JspServlet
获取。但是,由于您正在使用带有Facelets的JSF 2.0,因此您已经拥有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 doctype。 Facelets将负责设置正确的text/html
内容类型,UTF-8
字符编码等。
答案 1 :(得分:0)
您使用的JSP标记不会生成任何HTML。
contentType指令影响标题,而不是HTML。
答案 2 :(得分:0)
您需要激活JSF,常见的方法是将浏览器指向login.jsf或faces / login.xhtml。如果不这样做,那么该文件将被解析为未解析的浏览器