2011-05-22 39 views
0

我正在創建一個JSF應用程序,它有很多文本要靜態顯示,如描述和細節。如何在JSF應用程序中使用大量的靜態文本?

現在我的問題是,我不能使用屬性文件,因爲它需要逐行,我可以達到直線100段。

數據庫也不能用於某些商業原因。直接在faces-config.xml文件的價值標籤內

粘貼數據是一個選項,我想借此如果沒有其他可能

現在我想用一個簡單的文本文件,而不是和填充我的bean屬性直接在課堂上使用。

但是我很難使用它。路徑不是正確的,bean屬性中也存在某種重疊。

我使用Eclipse Helios和Tomcat進行開發。所以請考慮目錄結構與Eclipse中標準項目所使用的相同。

有人可以提供一個示例代碼或過程如何做到這一點?

感謝

+0

是將靜態文本存儲在數據庫中的一個選項嗎?您可以將其加載到@ApplicationScoped bean中,以便在應用程序中僅檢索一次。你也可以從文本文件中讀取同樣的內容,但是如果你已經在使用數據庫,那麼這就是我的方式。 – 2011-05-22 15:03:53

+0

其中jsf版本? – 2011-05-22 19:35:59

回答

0

路徑不出來是正確的

您可以使用ClassLoader.getResourceAsStream得到一個輸入流classpath中的文件。例如,如果你的文本文件是在/WEB-INF/classes/foo.txt,你可以像這樣打開它:

InputStream is = getClass().getClassLoader().getResourceAsStream("/foo.txt"); 
0

有多種方案,它們依賴於這樣的大量的靜態文本是又有多少其他JSF組件是如何獨特的網頁他們包含。

一種選擇是簡單地在與您支持的語言環境相對應的單獨文件夾中創建頁面,併爲每個語言環境創建版本。然後,如果您使用的是Facelets,請讓這些頁面成爲包含您的一般網站框架(頂部,底部等)的主模板的模板客戶端。

這適用於主要基於文本的頁面。您將爲每種語言版本公開一個單獨的URL。例如。 www.example.com/en/my_page.xhtml和www.example.com/nl/my_page.xhtml等。

如果這些頁面只包含一些組件,您可以通過ui包括那些:include,但是這個可能會很快變得混亂,並且不同語言環境的頁面可能會不同步。爲了解決這個問題,你可以爲每個頁面定義一個模板。該模板本身可以是普通主模板的模板客戶端,它包含特定頁面所需的所有組件。這個模板的最終客戶端會填充大量的靜態文本。

如果您不想向最終用戶公開不同的URL,您也可以選擇動態添加大量的靜態文本。考慮以下簡單的facelet:

<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
>  
    <h:body>  
     <ui:include src="#{facesContext.viewRoot.locale}/text.xhtml" />  
    </h:body> 
</html> 

(這是不是#{facesContext.viewRoot只是一個簡單的例子。locale}你也可以使用一個支持bean,在其上你可以有更多的控制權)

相關問題