2009-06-27 111 views
0

編寫一個簡單的JSF應用程序我在下面列出了一些問題: 我的entities.controller.EntityNameManager類包含一個方法getEntityNameSelectList(),我可以用它來填充一個ComboBox。這工作並顯示所有實體,因爲檢索實體的方法沒有where子句。 此方法是自動創建的。自定義getEntityNameSelectList()失敗

現在我想要第二個類似的方法,它根據sessionscope中的變量過濾選項。爲此,我複製了原始方法,將其重命名爲getEntityNameSelectListByUser(User theUser),並將查詢數據庫的方法更改爲確實通過UserId過濾的方法。

但是,當試圖在瀏覽器中加載頁面時,我收到一個錯誤,指出控制器類沒有「EntityNameSelectListByUser」屬性。我認爲,因爲我的新方法期望一個參數,它不能被發現。有沒有辦法讓我知道參數或Sessionscope userid?

回答

0

對EL中參數的支持將被定爲JSR 245(公告here;實現here)的下一個維護版本。


假設你不想等待JEE6,你有幾種方法來克服這個限制。這些接近的是根據POJO管理的bean來定義的,因此適合它們適合您的EJB。

1.

執行在輔助bean的會話查找和函數調用:

public String getFoo() { 
    FacesContext context = FacesContext 
     .getCurrentInstance(); 
    ExternalContext ext = context.getExternalContext(); 
    String bar = (String) ext.getSessionMap().get("bar"); 
    return getFoo(bar); 
    } 

實施例結合:

#{paramBean.foo} 

2.

使用EL function(定義在TLD中,映射到公共靜態方法):

public static String getFoo(ParamBean bean, String bar) { 
    return bean.getFoo(bar); 
    } 

實施例結合:

#{baz:getFoo(paramBean, bar)} 

3.

顛覆地圖類調用函數(一個黑客位的和限定於一個參數):

public Map<String, String> getFooMap() { 
    return new HashMap<String, String>() { 
     @Override 
     public String get(Object key) { 
     return getFoo((String) key); 
     } 
    }; 
    } 

綁定示例:

#{paramBean.fooMap[bar]}