2

我从 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>
4

1 回答 1

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 中不同(好得多)。

也可以看看:

于 2012-09-17T11:29:02.117 回答