2010-06-07 72 views
1

我有一個JSF創建表單,它使用帶selectItems的selectManyListbox(它應該包含所有可用於項目的標記)。儘管selectItems列表始終爲空 - 當頁面呈現時,Listbox中沒有任何內容。儘管如此,後臺bean中的列表包含3個條目(選中該條目)。我究竟做錯了什麼?JSF 2.0 h:selectManyListbox f:selectItems - 始終爲空

的支持bean:

@ManagedBean(name = "createProjectBean") 
@RequestScoped 
public class CreateProjectBean { 

public Project getProject() { 
    return project; 
} 

public void setProject(Project project) { 
    this.project = project; 
} 

private Project project; 
private IProjectService projectService; 
private FacesContext facesContext; 
private MessageFactory mf; 
private List<Tag> tags; 

public CreateProjectBean() { 

project = new Project(); 
projectService = (IProjectService)ServiceFinder.getInstance() 
.findBean("projectService"); 
mf = new MessageFactory("properties.projects.messages"); 
tags = projectService.getTags(); 
} 

/* should be the source of tags */ 
public void setTags(List<Tag> tags) { 
    this.tags = tags; 
} 

public List<Tag> getTags() { 
    return tags; 
    } 
} 

和頁面:

<f:view> 
    <h:outputText id="error" rendered="false" /> 
    <h:message styleClass="errorMessage" for="error" /> 
<h:form id="creationForm" > 
<h:panelGrid columns="2" width="420"> 

    /* blah, blah, set name and stuff */ 

       <h:selectManyListbox id="box" value = "#{createProjectBean.project.tags}"> 
        <f:converter converterId="tag" /> 
        <f:selectItems value="@{createProjectBean.tags}" 
        var="tag" 
        itemValue="#{tag}" 
        itemLabel="${tag.name}" /> 
       </h:selectManyListbox> 

    <f:verbatim><br/></f:verbatim> 
    <h:commandButton value="Create" styleClass="formButton" action="#{createProjectBean.create}"/> 
</h:panelGrid> 
</h:form> 
</f:view> 

我試圖去做每類比到這個網頁: http://digitaljoel.wordpress.com/2010/01/11/jsf-2-custom-converter/

我寫的轉換器還有待測試。

回答

4

你的EL是假的。你應該在任何地方使用#{}表示法。通過

<f:selectItems value="#{createProjectBean.tags}" 
       var="tag" 
       itemValue="#{tag}" 
       itemLabel="#{tag.name}" /> 
+1

哈更換

<f:selectItems value="@{createProjectBean.tags}" var="tag" itemValue="#{tag}" itemLabel="${tag.name}" /> 

。確實是假的。實際上,「@ {..}」是什麼? (1) – Bozho 2010-06-08 05:47:35