为什么没有解析jsp:标签?

时间:2010-07-28 13:26:39

标签: 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只是不理解它们。为什么呢?

3 个答案:

答案 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。如果不这样做,那么该文件将被解析为未解析的浏览器