2012-01-09 76 views
0

我寫了這樣一個問題:
https://stackoverflow.com/questions/8589315/jsf2-dynamic-template動態UI:包括

但BalusC和casperOne說我寫的不好,所以我試着更好地解釋我的問題。
正如我寫的,我有我在這個結構中的項目:

    在網站根3 XHTML頁面
  • :指數,包括和歡迎;
  • 將其他所有的xhtml頁面放入WEB-INF的子文件夾中調用jsf。

我想,這是一件好事,但我創建一個使用NetBeans的嚮導的所有頁面‘新建JSF頁面實體類...’,並使用該結構與此嚮導,我不能鏈接直接將xhtml頁面保存到由嚮導創建的jsf forlder中,然後創建include.xhtml並修改所有重定向到此頁面的方法,稍後我將解釋,include.xhtml僅包含此代碼:

<?xml version='1.0' encoding='UTF-8' ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

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


    <h:head> 
    </h:head> 
    <h:body> 
     Utente connesso:<h:outputText value="#{userBean.cognome}"/> 

     <h:outputText value="#{userBean.nome}"/> 
     <br/&gr; 

     <ui:include src="#{logicBean.pageIncluded}"/> 

    </h:body> 
</html> 

正如我所說的,我修改了所有方法來調用LogicBean中包含setPageIncluded並返回「include.xhtml」這樣的東西的方法:
PageController.java:

public void prepareList() { 
    recreateModel(); 
    LogicBean l = (LogicBean) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("logicBean"); 
    l.action(url+"List.xhtml"); 
} 

LogicBean.java:

public String action(String value) { 
    setPageIncluded(value); 
    return "include"; 
} 

下面這段代碼工作得很好,我可以從所有頁面瀏覽。
只有一個問題,bean的LogicBean存儲在會話中!
這意味着如果我試圖在同一時間打開一個新窗口來瀏覽項目的不同部分,我無法這樣做,因爲LogicBean只能包含pageInclude的一個值!

我試圖使用ViewScope,但或者我不明白它是如何工作的,在這種情況下它沒有用,或者我錯了什麼,它不能正常工作!
有人可以幫助我嗎?

我發現這個問題,這似乎可以幫助我: dynamic ui:include with el-expression?
但我不知道它是否能幫助以及如何修改c:forEach和行動方法,將其用於我的情況!

我希望這次我更好地解釋我的問題,如果是這樣,我感謝您的幫助!

+0

對於你想我讀到這裏什麼讓每個瀏覽器標籤的狀態,而不是每個瀏覽器,對不對? – 2012-01-10 13:21:44

+0

@ Adrian Mitev:如果你對於「狀態」是指類似於會話但不在瀏覽器的窗口或瀏覽器標籤之間共享的東西,那麼你是對的! – Filippo1980 2012-01-10 14:03:34

+0

您使用的是什麼應用程序服務器? – 2012-01-11 09:10:05

回答

2

您使用JEE6認證服務器,因此您可以使用CDI進行bean管理。有一個名爲MyFaces CODI的CDI擴展庫,其中包含一個Window範圍包,您可以使用它來限制您的Bean範圍,而不是使用會話範圍。這將解決你的問題與豆的範圍。

首頁 - http://myfaces.apache.org/extensions/cdi/

+0

非常感謝! – Filippo1980 2012-01-11 13:34:58

+1

使用CODI時,必須使用@WindowScoped註釋bean – 2012-01-11 15:54:52