<f:selectitems>不会在<h:selectmanylistbox> </h:selectmanylistbox> </f:selectitems>中呈现

时间:2012-09-17 10:19:50

标签: jsf-2 selectmanylistbox

我从JSF开始,尝试使用以下简单示例,但它只显示一个空矩形

java bean代码是:

import javax.faces.model.SelectItem;
import java.util.*;

public class SItemsBean
{ 
  private List options;
  public SItemsBean() 
  {
  options = new ArrayList();
  SelectItem option = new SelectItem("ch1", "choice1", "This bean is for selectItems tag", true);
  options.add(option);
  option = new SelectItem("ch2", "choice2");
  options.add(option);
  option = new SelectItem("ch3", "choice3");
  options.add(option);
  option = new SelectItem("ch4", "choice4");
  options.add(option);
  option = new SelectItem("ch5", "choice5");
  options.add(option);
  }

   public void setOptions(List opt)
  {
   options = opt;
  }

   public List getOptions()
  {
   return options;
  }
}

和xhtml代码是:

<h:form>
<h:outputText value="Select choices given below :"/><br/><br/>
<h:selectManyListbox id="subscriptions" value="#{SItemsBean.options}" size="3">
<f:selectItems value="#{SItemsBean.options}" />
</h:selectManyListbox>
</h:form>

并在faces-config.xml中添加以下内容:

<managed-bean>
    <managed-bean-name>sItemsBean</managed-bean-name>
    <managed-bean-class>sItemsBean</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
    <managed-property>
        <display-name>options</display-name>
        <property-class>java.util.List</property-class>
    </managed-property>     
</managed-bean>

1 个答案:

答案 0 :(得分:0)

您的问题是由以下托管属性引起的:

<managed-property>
    <display-name>options</display-name>
    <property-class>java.util.List</property-class>
</managed-property>     

在构造bean之后设置托管属性。这个基本上将options属性设置为空列表,从而覆盖了你在bean的构造函数中努力填充的列表。

我不确定你为什么这样配置它,但我相信你误解了<managed-property>的目的。它并不是要“声明”bean的所有可用属性,不是,而是在bean构造之后将bean的属性设置指定的值。

要解决您的具体问题,只需从<managed-property> 删除 faces-config.xml


对具体问题

无关,你确定你正在学习正确的JSF资源吗?到目前为止,您发布的代码是旧JSF 1.x的典型代码,并且根本不使用任何新的JSF 2.x功能,例如@ManagedBean。确保您从正确的JSF资源中学习,因为在JSF 2.x中,很多事情都比JSF 1.x做得更好(更好)。

另见: