JSF 2.0 h:selectManyListbox f:selectItems - 总是空的

时间:2010-06-07 15:27:33

标签: java jsf jsf-2

我有一个使用selectManyListbox的JSF创建表单,里面有selectItems(它应该包含项目可用的所有标签)。但是selectItems列表总是为空的 - 当页面呈现时,列表框中没有任何内容。但是,支持bean中的列表包含3个条目(选中)。我做错了什么?

支持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/

我写的转换器还有待测试。

1 个答案:

答案 0 :(得分:4)

你的EL是假的。您应该在任何地方使用#{}表示法。取代

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

通过

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