2013-10-11 29 views
2

我有这样的:标签不渲染,而http://java.sun.com/jsf做工精细

<html 
    xmlns:f="http://xmlns.jcp.org/jsf/core" 
    xmlns:h="http://java.sun.com/jsf/html" 
> 
<h:selectOneRadio> 
    <f:selectItem value="1" itemValue="1" itemLabel="123"/> 
    <f:selectItem value="2" itemValue="2" itemLabel="321"/> 
</h:selectOneRadio> 

而且我得到这个:

<f:selectItem value="1" itemValue="1" itemLabel="123"></f:selectItem> 
<f:selectItem value="2" itemValue="2" itemLabel="321"></f:selectItem> 
<select name="j_idt5" size="1"></select> 

为什么xmlns:f="http://xmlns.jcp.org/jsf/core"标签无法呈现?

我在Netbeans 7.3上使用JBoss AS 7。

+4

看起来问题是您没有使用JSF 2.2,所以您必须将名称空间定义为'xmlns:f =“http://java.sun.com/jsf/core”'。 –

回答

6

JSF taglib URI中的新XML命名空间域http://xmlns.jcp.org在作为Java EE 7一部分的JSF 2.2中引入。作为兼容Java EE 6的应用程序服务器的JBoss AS 7未附带捆绑的JSF 2.2,而是使用JSF 2.1。因此,新的XML名称空间域根本不起作用。此外,新的JSF 2.2特定功能(例如直通元素和属性)根本无法工作。

您需要使用JSF 2.1兼容的XML命名空间域http://java.sun.com。下面是完整的一套:

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

我不知道为什么你尝试使用新的JSF 2.2 XML命名空间。也许你错误地阅读了JSF 2.2有针对性的教程(例如Oracle Java EE 7 tutorial)而不是JSF 2.0/2.1目标教程(例如Oracle Java EE 6 tutorial)。仔细注意版本匹配。

如果您真的打算在JBoss服务器上使用JSF 2.2,那么您应该基本上将旧的JBoss AS 7升级到其兼容Java EE 7的后继WildFly 8。或者,按照此处的说明手动将JBoss AS 7的捆绑JSF库升级到更新的版本:Upgrade JSF/Mojarra in JBoss AS/EAP/WildFly

+0

这有帮助!非常感谢你! 我正在使用NetBeans 7.3并自动添加“错误”名称空间。我不知道它为什么强加新的测试版jsf 2.2而不是旧的。 – KorobOK

-2

请看看在WEB-INF文件夹 存在的web.xml 如果没有这样的文件,JSF是不是呈现对于JBoss 许多Maven原型还没有这个文件 创建WEB-INF文件夹 样品中该文件:

http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd” ID = “WebApp_ID” 版本= “2.5”>

<display-name>JavaServerFaces</display-name> 

<!-- Change to "Production" when you are ready to deploy --> 
<context-param> 
    <param-name>javax.faces.PROJECT_STAGE</param-name> 
    <param-value>Development</param-value> 
</context-param> 

<!-- Welcome page --> 
<welcome-file-list> 
    <welcome-file>faces/hello.xhtml</welcome-file> 
</welcome-file-list> 

<!-- JSF mapping --> 
<servlet> 
    <servlet-name>Faces Servlet</servlet-name> 
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<!-- Map these files with JSF --> 
<servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>/faces/*</url-pattern> 
</servlet-mapping> 
<servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>*.jsf</url-pattern> 
</servlet-mapping> 
<servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>*.faces</url-pattern> 
</servlet-mapping> 
<servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>*.xhtml</url-pattern> 
</servlet-mapping> 

+2

您将当前问题与其他问题混淆:http://stackoverflow.com/questions/3112946/jsf-returns-blank-unparsed-page-with-plain-raw-xhtml-xml-el-source-instead基本上,你发布这个“答案”到一个错误的问题。顺便说一下,有4个松散的servlet映射是不必要的。您只能拥有4个网址格式。即使如此,有4个URL模式是荒谬的,而不是搜索引擎优化。只要坚持一个,'* .xhtml'。 – BalusC