Я создал собственный компонент в 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
, я получаю правильное значение имени, но я заинтригован, почему это не работает с геттером и сеттером.
Есть идеи, чего не хватает моему компоненту?