JSF - 自定义标签 - selectonemenu - ajax监听器

时间:2015-08-30 04:18:58

标签: ajax jsf listener selectonemenu actionevent

我使用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;
}

感谢您的回答

1 个答案:

答案 0 :(得分:0)

我认为这是因为您为自定义标记的String属性而不是方法表达式添加listener值。将属性值换行#{}

listener="#{programController.onContinentChange}"