<f: selectItems> не отображаются в <h: selectManyListbox>
Я начинаю с JSF и пытаюсь заставить работать следующий простой пример, но он просто отображает пустой прямоугольник
Код Java-бина:
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>
и добавил следующее в Face-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>
Управляемые свойства устанавливаются после построения компонента. Этот в основном устанавливает options
свойство с пустым списком и, таким образом, переопределяет список, который вы старательно заполнили в конструкторе компонента.
Я не уверен, почему вы настроили это так, но я считаю, что вы неправильно поняли цель <managed-property>
, Он не намеревается "объявлять" все доступные свойства компонента, нет, вместо этого он устанавливает свойства компонента на указанные значения после построения компонента.
Чтобы решить вашу конкретную проблему, просто удалите это <managed-property>
от твоего faces-config.xml
,
Независимо от конкретной проблемы, вы уверены, что учитесь на правильных ресурсах JSF? Код, который вы опубликовали до сих пор, типичен для старого JSF 1.x и не использует никаких новых функций JSF 2.x, таких как @ManagedBean
совсем. Убедитесь, что вы учитесь на правильных ресурсах JSF, потому что в JSF 2.x многие вещи выполняются иначе (намного лучше), чем в JSF 1.x.
Смотрите также:
- Наша вики-страница JSF
- наш
h:selectOneMenu
вики-страница (с примерами JSF 2.x)