我从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>
答案 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做得更好(更好)。
h:selectOneMenu
wiki page(使用JSF 2.x目标示例)