jsf2 + ‹управляемое-свойство› ‹имя-свойства›

У меня есть сопоставленный компонент в faces-config.xml.

<managed-bean>
  <managed-bean-name>beanName</managed-bean-name>
  <managed-bean-class>java.util.HashMap</managed-bean-class>
  <managed-bean-scope>view</managed-bean-scope>
  <managed-property>
   <property-name>elements</property-name>
   <map-entries>
    <key-class>java.lang.String</key-class>
    <value-class>path.InputFormElementContainer</value-class>
   </map-entries>
  </managed-property>
 </managed-bean>

Реализация в java:

public class InputFormElementContainer implements List<InputFormElement>, Serializable{


    private static final long serialVersionUID = -4685106549564090233L;
    private List<InputFormElement> elements;

    //Empty Constructor
    public InputFormElementContainer() {
        elements = new ArrayList<InputFormElement>();
    }
    public List<InputFormElement> getElements() {
        return elements;
    }
    public void setElements(List<InputFormElement> elements) {
        this.elements = elements;
    }
}

Но я получаю эту ошибку, когда обновляю свое приложение:

com.sun.faces.mgbean.ManagedBeanCreationException: No se puede crear el bean administrado beanName.  Se han encontrado los problemas siguientes:
     - No existe la propiedad elements para el bean administrado beanName.

Перевод на английский может быть таким: невозможно создать управляемое имя_компонента из-за следующей проблемы: свойство elemts не существует для имени_компонента.

Эта проблема возникла у меня при переходе на JSF2. Я читал учебные пособия, но не мог понять, как правильно сделать этот компонент управления в JSF2. Кто-нибудь может мне помочь??
Заранее спасибо!


person Blanca Hdez    schedule 06.04.2011    source источник
comment
mkyong.com/jsf2/jsf-2-0 -spring-hibernate-integration-example эта страница может быть очень полезной, но она не включает мой случай в частности   -  person Blanca Hdez    schedule 06.04.2011


Ответы (2)


Это неверно

<managed-bean-name>beanName</managed-bean-name>
  <managed-bean-class>java.util.HashMap</managed-bean-class>
  <managed-bean-scope>view</managed-bean-scope>
  <managed-property>
   <property-name>elements</property-name>

здесь jsf будет искать геттеры/сеттеры поля elements в java.util.HashMap, которого не существует, поэтому ошибка

person jmj    schedule 06.04.2011
comment
Но в способе сопоставления я хочу указать, что beanName — это hashMap‹Sring, InputFormElementContainer›. Я делаю это неправильно?? - person Blanca Hdez; 06.04.2011
comment
Я не хочу указывать элементы как HashMap, но мне нужно, чтобы beanName было hashMap‹String, InputFormElementContainer›. Как я мог написать, что тип элементов не является HashMap?? Теперь в JSF2 все по-другому, чем раньше? В JSF1 этот же код работал - person Blanca Hdez; 06.04.2011
comment
Я имею в виду, как я могу объявить элементы как List‹InputFormElement› (как в бэкэнде) - person Blanca Hdez; 06.04.2011
comment
мне все еще неясно, но мне нужно, чтобы beanName было hashMap‹String, InputFormElementContainer›. - person jmj; 06.04.2011
comment
beanName -> hashMap‹String, InputFormElementContainer› elements -> List‹InputFormElement›, который является полем внутри InputFormElementContainer. Как я могу управлять этим в Faces-config?? Спасибо, и извините за меня английский - person Blanca Hdez; 06.04.2011

У вас есть два варианта в зависимости от того, как вы хотите смоделировать свой класс InputFormElementContainer.

Если вам нужно, чтобы «элементы» были списком:

<managed-bean>
  <managed-bean-name>beanName</managed-bean-name>
  <managed-bean-class>java.util.HashMap</managed-bean-class>
  <managed-bean-scope>view</managed-bean-scope>
  <managed-property>
    <property-name>elements</property-name>
    <property-class>java.util.ArrayList</property-class>
    <list-entries>
      <value-class>path.InputFormElementContainer</value-class>
      <value>...</value
      ...
    </list-entries>
  </managed-property>
</managed-bean>

Или, если вам нужно, чтобы свойство "элементы" было картой:

<managed-bean>
      <managed-bean-name>beanName</managed-bean-name>
      <managed-bean-class>java.util.HashMap</managed-bean-class>
      <managed-bean-scope>view</managed-bean-scope>
      <managed-property>
        <property-name>elements</property-name>
        <property-class>java.util.HashMap</property-class>
        <map-entries>
          <key-class>java.lang.String</key-class>
          <value-class>path.InputFormElementContainer</value-class>
          <map-entry>
            <key></key>
            <value></value>
          </map-entry>
        </map-entries>
      </managed-property>
    </managed-bean>
person Ghasfarost    schedule 20.11.2012