2009-06-08 25 views
0

我有一個Web應用程序,我需要能夠從JSF頁面配置部分內容。因此,舉例來說,假設我的申請被分成幾個小的部分每一個文件夾/文件結構如下圖所示:如何創建頁內配置。通過c:設置?

/partname 
    /config 
     config.xhtml 
    /template 
     generaltemplate.xhtml 
    search.xhtml 
    results.xhtml 

Search.xhtml & results.xhtml都使用模板文件,generaltemplate.xhtml。這個通用模板包含了config.xhtml的內容。計劃是將所有共享配置放入此頁面,以便應用程序可以訪問它。但是我在這樣做時遇到了麻煩。

如果我在config.xhtml中使用< c:set >創建變量,那麼它們似乎只能從該配置頁面訪問。以前我只是改變了<的範圍c:設置>要求和ny問題將被解決。但是當JSF以不同的方式工作時,我知道在這種情況下範圍是無用的。

有沒有人有任何建議,我將如何能夠創建我的所有配置在這一頁,然後能夠訪問它遍及我的應用程序?

這個應用程序是用Seam編寫的,所以使用Seam中的東西可能是一個選項。

+0

我明白這不是MVC模式的工作方式,而是我把配置放在錯誤的地方。但不幸的是,我的雙手綁在這個上,我只是尋找最簡單的方法來做我需要的。 – 2009-06-08 06:28:33

回答

0

Seam是一個模型 - 視圖 - 控制器(MVC)框架。該視圖是使用JSF頁面實現的。配置是模型的一部分,不應該放在頁面中。

爲了實現適當的分層,我建議你把你的配置放在你在JSF頁面引用的某種全局可訪問的bean中(由Seam實例化,可能由.properties文件填充)。

0

我不知道需要多少重構,但是你可以創建一個適當範圍的配置bean,然後使用c:set標籤來設置你的配置bean。然後,在稍後的頁面中,可以使用配置bean而不是直接訪問變量。

1

假設你可以使用Facelets,對於C:設置問題:

在模板:

... 
<html ... 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
... 
<body> 
    <ui:param name="testParam" value="Test" /> 

    <ui:insert name="test"> 
    </ui:insert> 
... 

在這種情況下,用戶界面的數值:PARAM可以作爲一個變量是在使用該模板的頁面中使用。

頁中使用的模板:

... 
<html ... 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
... 
<body> 
<ui:composition template="/WEB-INF/templates/template.xhtml"> 
    <ui:define name="test"> 
<h:outputText value="#{testParam}" /> 
... 

雖這麼說,我能想到這個地方實際上應使用極少數實例。除非你的手綁定,否則值應該來自應用程序/會話範圍的bean。

編輯:

我的但是不是雙早檢查,因爲我非常忙碌,使用浮現在腦海的第一個答案,道歉,我驗證了使用交流:在將UI的設置:PARAM會工作同樣也使用之前定義的設置。所以,在模板中,你可以不用。這意味着你還必須包含xmlns:c =「http://java.sun.com/jstl/core」,我相信你已經有了。

相關問題