<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.

Смотрите также:

Другие вопросы по тегам