2010-09-14 67 views
2

我試圖填充<h:selectOneMenu>的列表。但是,我試圖檢索的列表是另一個基類中變量的類的一部分。JSF從子類中選擇項目

這是我的,我不知道這是甚至可能或如何做到這一點。

我有一個Citation類有以下:

public class Citation { 
    private int id; 
    private String title; 
    private Status status; 

    // getters and setters 
} 

然後,我有一個Status類有以下:

public class Status { 
    private int id; 
    private String name; 

    public List<Status> getAll() { 
     // goes to the database and gets a list of status objects 
     System.out.println("I was called!"); 
    } 

    // getters and setters 
} 

然後我XHTML頁面上,我有以下幾點:

<h:selectOneMenu id="citation_status" value="#{citation.status}"> 
    <f:selectItems value="#{citation.status.all}" var="s" 
      itemLabel="#{s.name}" itemValue="#{s.id}" /> 
</h:selectOneMenu> 

但是,這似乎並沒有調用方法在Status類中。當頁面加載完成時,選擇框爲空,並且控制檯沒有從getAll()方法輸出I was called!

我對JSF有點新,我試過盡我所能尋找最好的,但我不確定在搜索時使用的術語,因爲它在技術上不稱爲「子類」,但這是我可以提出的最好的名字,所以不用說,我沒有找到任何東西。

其他信息

如果有幫助:

  • 我用Glassfish的作爲我的應用程序服務器
  • 我使用Hibernate我ORM
  • 我使用JSF 2.0

回答

2

顯然#{citation.status} ret請致電null

這就是說,這是行不通的。 h:selectOneMenu value必須與f:selectItem itemValue相同,在本例中爲int。你會得到一個轉換器異常。

如何解決這個問題最好取決於功能需求,目前尚不清楚。也許你需要f:selectItem itemValue="#{s}",或者你需要h:selectOneMenu value="#{citation.id}"


更新:作爲轉換器,這裏有一個開球例如:

@FacesConverter(forClass=Status.class) 
public class URLConverter implements Converter { 

    @Override 
    public Object getAsObject(FacesContext context, UIComponent component, String value) { 
     try { 
      return someStatusDAO.findById(Long.valueOf(value)); 
     } catch (SomeException e) { 
      throw new ConverterException(new FacesMessage(String.format("Cannot convert %s to Status", value)), e); 
     } 
    } 

    @Override 
    public String getAsString(FacesContext context, UIComponent component, Object value) { 
     return String.valueOf(((Status) value).getId()); 
    } 

} 
+0

現在我想到了,這是有道理的,因爲'status'尚未初始化。對於''value屬性,我可以使用'status.all'而不是'citation.status.all'嗎? – Jared 2010-09-14 18:12:42

+0

如果在範圍的某個地方有'#{status}',那肯定是。你還必須修復潛在的轉換問題:) – BalusC 2010-09-14 18:14:40

+0

至少可以獲取列表中的項目。至於轉換問題,有沒有辦法將值設置爲實際的對象?我嘗試使用'',但得到錯誤'錯誤設置值狀態爲空轉換器'我假設我需要查看使用轉換器來處理? – Jared 2010-09-14 18:18:51

0

你需要一個公共的getter在引文狀態。