2013-10-11 28 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