<f:selectItems> 未在 <h:selectManyListbox> 中呈现

Posted

技术标签:

【中文标题】<f:selectItems> 未在 <h:selectManyListbox> 中呈现【英文标题】:<f:selectItems> are not rendered in <h:selectManyListbox> 【发布时间】:2012-09-17 10:19:49 【问题描述】:

我从 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】:

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

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

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

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

要解决您的具体问题,只需从您的faces-config.xml删除 &lt;managed-property&gt;


与具体问题无关,您确定您正在从正确的 JSF 资源中学习吗?到目前为止,您发布的代码是旧 JSF 1.x 的典型代码,根本不使用任何新的 JSF 2.x 功能,例如 @ManagedBean。确保您从正确的 JSF 资源中学习,因为在 JSF 2.x 中,很多事情的完成方式与在 JSF 1.x 中不同(好得多)。

另见:

Our JSF wiki page Our h:selectOneMenu wiki page(带有 JSF 2.x 目标示例)

【讨论】:

非常感谢 BalusC,这解决了问题,我真的从 Oracle 的 Java EE 教程开始,但他们的解释不是很清楚,所以我用谷歌搜索并找到了这个旧教程,并感谢链接。跨度>

以上是关于<f:selectItems> 未在 <h:selectManyListbox> 中呈现的主要内容,如果未能解决你的问题,请参考以下文章

JSF 2 - f:selectItems 与日期键映射

JSF-2 f:带有Map的selectItems不显示itemLabel

JSF-2 f:selectItems with Map 不显示 itemLabel

何时使用 valueChangeListener 或 f:ajax 监听器?

马拉地语未在浏览器中正确显示

功能未在按钮单击phonegap上运行