Пользовательские компоненты JSF 2, имеющие язык выражений для значения атрибута, не запускают средство установки атрибута

Я создал собственный компонент в JSF 2.0

Тег выглядит так:

<x:myTag id="1" name="AAA" />

Соответствующий класс Java:

@FacesComponent("a.b.c.MyTag")
public class UIMyTag extends UIInput {

   private String name;
   private String id;

   public String getId() {
      return id;
   }

   public void setId(String id) {
       this.id = id;
   }


   public String getId() {
      return id;
   }

   public void setId(String id) {
       this.id = id;
   }

   public String getName() {
      return name;
   }

   public void setName(String name) {
       this.name = name;
   }

   @Override
   public void encodeBegin(FacesContext context) throws IOException {
       ResponseWriter writer = context.getResponseWriter();
       logger.debug(getName()); //prints null for name="#{dummyBean.name}" 
                                //   and AAA for name="AAA"
       logger.debug(getAttributes().get("name")); // always correct value
  ...
}
  ....

}

Если я использую

<x:myTag id="1" name="AAA" />

все работает как положено, но когда я использую EL для атрибутов myTag, метод setName()никогда не вызывается. Итак,

<x:myTag id="#{dummyBean.id}" name="#{dummyBean.name}" />

Я всегда получаю nullдля свойства nameвнутри моего метода encodeBegin. После отладки я заметил, что метод setNameникогда не вызывается. Я подумал, что, возможно, что-то в отношении EL все портит (, и я все еще считаю, что причина связана с этим ), но что действительно странно, так это то, что свойство idработает хорошо :, сеттер вызывается, и значение, как и ожидалось, когда начинается согласование.

Я должен упомянуть, что если я вызываю getAttributes().get("name")из метода encodeBegin, я получаю правильное значение имени, но я заинтригован, почему это не работает с геттером и сеттером.

Есть идеи, чего не хватает моему компоненту?

8
задан RaresI 8 August 2012 в 14:40
поделиться