2013-03-04 112 views
0

我是JSF和EJB應用程序的新手,因此即使在簡單的JavaEE應用程序中也會遇到問題。我在eclipse中用JBoss創建了一個簡單的JavaEE應用程序,目標只是嘗試一些JSF標籤以及它們與Java Bean的綁定。我無法找出原因如下JSF的代碼不會得到什麼出現在輸出頁面:無法獲得Jsf標籤outputText出現

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

    <f:loadBundle basename="resources" var="msg" /> 
    <head> 
    <title><ui:insert name="pageTitle">Page Title</ui:insert></title> 
    <style type="text/css"> 

    </style> 
    </head> 

<body bgcolor="#ffffff"> 
<h:body> 
<h:outputText value="#{hello.world}" /> 
<h:outputText value="TTT" /> 
</h:body> 
</body> 

</html> 

不僅價值hello.world未來的form bean,而是一個簡單的文本「TTT」沒有出現爲好。 bean的代碼是:

@ManagedBean 
public class Hello { 

final String world = "World"; 

/** 
* Default constructor. 
*/ 
public Hello() { 
} 

public String getWorld(){ 
    return "Hello" + world; 
} 

} 

被Facelets-config.xml文件是:

<?xml version="1.0" encoding="UTF-8"?> 
<faces-config version="2.1" xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:xi="http://www.w3.org/2001/XInclude" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee /web-facesconfig_2_1.xsd"> 
<managed-bean> 
    <managed-bean-name>hello</managed-bean-name> 
    <managed-bean-class>com.al.jsftest.Hello</managed-bean-class> 
    <managed-bean-scope>session</managed-bean-scope> 
</managed-bean> 

</faces-config> 

當我嘗試使用純文本標籤,它散發出來的屏幕上,但它確實不會再與#{hello.world}一起工作,即綁定到Bean失敗。一旦我有了一個提示,讓我如何讓JSF標籤成功輸出,我將不勝感激提示我應該注意什麼,以便讓Bean綁定到JSF?

UPDATE: 這似乎是同樣的問題similar question,但我的應用程序是在Eclipse與JBoss,而不是在Netbeans的GlassFish的。因此,我添加了我的web.xml文件,可能需要對其進行修改,但我仍然無法弄清楚。

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee /web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> 
<display-name>JsfTest</display-name> 
    <welcome-file-list> 
    <welcome-file>index.xhtml</welcome-file> 
    </welcome-file-list> 
    <servlet> 
    <servlet-name>Faces Servlet</servlet-name> 
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 
<servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>/faces/*</url-pattern> 
</servlet-mapping> 

回答

0

你必須告訴你的頁面應該在你的web.xml -file定義的JSF小服務程序被加載服務器。
如果我理解你的示例權限,你有一個名爲index.xhtml的歡迎文件,它應該通過調用你的網站用JSF呈現給用戶。

有問題:
,所有的頁面不會被JSF呈現,除非你「把他們通過」您定義的JSF小服務程序。

你的servlet定義應該是這樣的:

<servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>/faces/*</url-pattern> /* !important */ 
</servlet-mapping> 

,因此,你有兩個(還有更多的肯定:))的方式來告訴服務器與JSF,Servlet來加載頁面:

  1. 告訴你的歡迎,文件加載與JSF小服務程序

    <welcome-file-list> 
        <welcome-file>faces/index.xhtml</welcome-file> /* note the /faces/ prefix */ 
    </welcome-file-list> 
    
  2. 擴展您<url-pattern>servlet-mapping

    <servlet-mapping> 
        <servlet-name>Faces Servlet</servlet-name> 
        <url-pattern>/faces/*</url-pattern> 
        <url-pattern>*.xhtml</url-pattern> /*tell JSF to render all pages with xhtml-extension*/ 
    </servlet-mapping> 
    

療法不應該是Netbeans的+ Glassfish的和JBoss +有什麼區別食,但你應該檢查JSF庫由服務器加載。

最後一個音符:
您要通過faces-config.xml構式的豆類,那將做的工作,但由於JSF 2.x中你能夠通過註釋,例如做你的類中相同

@ManagedBean 
@SessionScoped 
public class TestBean { 
    // your stuff here 
} 

對我來說,這是更容易,更具可讀性。

希望這個幫助,玩得開心!

編輯:
您的意見後,我已經測試您的設置:沒有錯!
起初我有一個錯誤,因爲我的設置中沒有定義<f:loadBundle basename="resources" var="msg" />,但刪除此行後,一切正常。

儘管如此,我在第一個列表項中做了一個小的拼寫錯誤,所以請再次檢查一下。
你的xhtml-skeleton對我來說看起來很好,在我的測試中工作,所以不應該有任何錯誤。

請檢查以下內容:

  1. 要麼由服務器或應用程序加載的JSF的庫
  2. 是否存在了servlet相關的web.xml -file
  3. 內部定義什麼是詳細的錯誤信息

乾杯!

+0

我已經在我的web.xml文件中包含了servlet映射。它只是在輸出中不明顯(頁面沒有被視爲代碼)。我將歡迎文件更改爲/faces/index.xhtml,但不幸的是它沒有帶來任何效果。輸出文本 - 標籤等未呈現。當我添加到servlet映射 * .xhtml時出現錯誤。 – arjacsoh 2013-03-04 13:09:12

+0

錯誤不是來自* .xhtml,而是Jsf標記不呈現的方式。這是否應該歸功於我在創建文件時選擇了「Common Facelet Page」作爲模板的事實? – arjacsoh 2013-03-04 13:23:47

+0

更新了我的答案。如果錯誤仍然存​​在,請發送詳細消息。 – SimonSez 2013-03-04 13:57:45

0

我創建了一個新的動態Web項目,我添加了這次使用「Blank Facelet Page」作爲模板而不是「Common Facelet Page」的index.xhtml文件。我改變了我的web.xml文件中的url-pattern爲* .xhtml,它最終可以通過瀏覽器上的完整路徑名(\ index.xhtml)工作或不工作。遵循與「Common Facelet Page」相同的流程,我無法完成這項工作。奇怪。

我也注意到,在選擇「Common Facelet Page」並單擊下一步後,會出現一個庫列表,用戶可以選擇檢查其中的一些。我沒有檢查任何東西,也許我應該有。

+0

當您確定這些庫已包含在服務器端時,您不需要檢查項目創建對話框中的那些庫!很高興聽到它終於爲你解決了!乾杯。 – SimonSez 2013-03-04 14:34:45