Я пытаюсь создать настраиваемый компонент JSF и добавить к нему выражение метода. Это код моего пользовательского компонента:Как добавить выражение метода к пользовательскому компоненту JSF
@FacesComponent(AjaxCommand2.COMPONENT_TYPE)
public class AjaxCommand2 extends UIComponentBase {
public static final String COMPONENT_TYPE = "local.test.component.AjaxCommand2";
public static final String COMPONENT_FAMILY = "local.test.component.AjaxCommand2";
private MethodExpression listener;
public MethodExpression getListener() {
return listener;
}
public void setListener(MethodExpression listener) {
this.listener = listener;
}
@Override
public String getRendererType() {
return null;
}
@Override
public String getFamily() {
return COMPONENT_FAMILY;
}
}
Это мой тег Lib файл:
<?xml version="1.0" encoding="UTF-8"?>
<facelet-taglib id="test"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facelettaglibrary_2_0.xsd" version="2.0">
<namespace>http://local.test/ui</namespace>
<tag>
<tag-name>ajaxCommand2</tag-name>
<component>
<component-type>local.test.component.AjaxCommand2</component-type>
</component>
<attribute>
<name>listener</name>
<required>false</required>
<type>javax.el.MethodExpression</type>
</attribute>
</tag>
</facelet-taglib>
И это соответствующий код на странице JSF:
<test:ajaxCommand2 listener="#{testSessionBean.testActionAjax}" />
Моя проблема заключается в том, что установщик для прослушивателя никогда не вызывается в моем настраиваемом компоненте, и всегда я получаю null в свойстве слушателя.
Я не вижу проблемы. Любая идея ?, Я бы хотел, чтобы свойство listener указывало на конкретный метод одного поддерживаемого компонента.