1

我第一次尝试使用 JSF,但我不了解 JSF 的 JSP 标签库。

在 Eclipse (Indigo) 下,当我创建一个新的 JSP 文件时,我可以在一些模板之间进行选择:

  • 新的 JavaServer Faces (JSF) 页面 (html)
  • 新的 JavaServer Faces (JSF) 页面 (xhtml)
  • 新的 JavaServer Faces (JSF) 页面(xhtml、xml 语法)
  • ...

html 模板使用<%@ taglib prefix="..." uri="..." %>,而 xhtml 模板使用<html xmlns:...="...">.

当我选择 xhtml 模板时,似乎不支持 JSF taglib,因为当我使用时,<h:outputText value="#{bean.beanMethod}" />我收到了 Exception :

[#|2012-10-04T10:51:45.734+0200|警告|glassfish3.1.1|javax.enterprise.system.container.web.com.sun.enterprise.web|_ThreadID=39;_ThreadName=Thread-2;| ApplicationDispatcher[/testjsf] PWC1231: Servlet jsp 的 Servlet.service() 抛出异常 org.apache.jasper.JasperException: /b.jsp(14,25) PWC6228: #{...} not allowed in a template text body。在 org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:81) 在 org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:376) 在 org.apache.jasper.compiler.ErrorDispatcher.jspError (ErrorDispatcher.java:188) 在 org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:755) 在 org.apache.jasper.compiler.Node$ELExpression.accept(Node.java:947) 在org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2297) 在 org。

使用 html 模板,它可以工作。

那么如何将 JSF 与 xhtml 模板一起使用呢?

它使用:

<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html">

<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>

在一起,但我相信声明xmlns会取代<%@ taglib %>指令?

感谢您的帮助

4

1 回答 1

2

大约 3 年前,JSP 已被弃用为 JSF 2.0 视图技术。你为什么要使用它?


回到你的具体问题:

PWC6228:模板文本正文中不允许使用 #{...}。

这基本上意味着<h:outputText>没有被 解析,FacesServlet因此被解释为纯模板文本,包括 EL 表达式。但是,在 JSP 中不支持在#{}模板文本中。<p>#{foo}</p>它仅在其继任者 Facelets 中受支持。

<h:outputText>不被解析FacesServlet只能意味着浏览器地址栏中出现的请求 URL 与webapp中定义<url-pattern>的. 这种方式不会被调用,并且所有 JSF 组件都不会被解析并被视为纯文本。FacesServlet/WEB-INF/web.xmlFacesServlet

也许您已经将它映射到*.xhtml它解释 Facelets 文件工作正常?然后,您应该通过b.xhtml而不是打开它b.jsp

然而,如前所述,自 JSF 2.0 起,JSP 已被弃用。它不允许您使用 JSF 2.0 的所有功能,例如<h:head>,<f:ajax>等,更不用说Facelet 模板功能了。忘记 JSP 并坚持使用它的继任者 Facelets。

于 2012-10-04T13:43:39.973 回答