我使用JSF2.2和primefaces 5.2。
我的页面包含Primefaces的本机代码。 IT WORKS :
<p:selectOneMenu id="continent" value="#{programController.continentCode}">
<p:ajax listener="#{programController.onContinentChange}"
update=searchForm:country"
immediate="true" />
<f:selectItems value="#{programController.continent.listResult}"
var="item"
itemLabel="#{item.name}" itemValue="#{item.code}" />
</p:selectOneMenu>
我的自定义标签页面。 它不工作:
<mp:select_one id="continent" rendered="true" required="false"
label="#{bundleMessage['label.key']}"
value="#{programController.continentCode}"
list="#{programController.continents.listResult}"
item_label="#{item.name}" item_value="#{item.code}"
listener="programController.onContinentChange"
update="search_form:country" immediate="true"/>
我的自定义标记:
<p:selectOneMenu id="#{id}" styleClass="#{styleClass}" required="#{required}" value="#{value}" rendered="#{rendered}">
<p:ajax listener="#{listener}"
update="#{update}"
immediate="#{immediate}" />
<f:selectItems value="#{list}"
var="item"
itemLabel="#{item_label}" itemValue="#{item_value}" />
</p:selectOneMenu>
自定义标记用法报告错误:
com.sun.faces.lifecycle.ApplyRequestValuesPhase execute
WARNING: /WEB-INF/mp-tags/select_one.xhtml @119,33 listener="#{listener}": Identity 'listener' does not reference a MethodExpression instance,
returned type: java.lang.String
javax.el.ELException: /WEB-INF/mp-tags/select_one.xhtml @119,33 listener="#{listener}": Identity 'listener' does not reference a MethodExpression instance, returned type: java.lang.String
我的控制器:
public void onContinentChange() {
LOGGER.logDebug(">>>>>>>>>>>>>>>>>>>> {%s}", continentCode);
countries = list("COUNTRY_BY_CONTINENT", new String[] {continentCode});
}
public ListBean getCountries() {
return countries;
}
感谢您的回答
答案 0 :(得分:0)
我认为这是因为您为自定义标记的String
属性而不是方法表达式添加listener
值。将属性值换行#{
和}
:
listener="#{programController.onContinentChange}"