【问题标题】:JSF - custom tag - selectonemenu - ajax listener [duplicate]JSF - 自定义标签 - selectonemenu - ajax 监听器
【发布时间】:2015-11-24 10:01:14
【问题描述】:

我使用 JSF2.2 和 primefaces 5.2。

我的页面带有 Primefaces 的本机代码。 它可以工作

<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;
}

感谢解答

【问题讨论】:

    标签: ajax jsf listener selectonemenu actionevent


    【解决方案1】:

    我认为这是因为您将 String 值放入自定义标记的 listener 属性而不是方法表达式。用#{}包装属性值:

    listener="#{programController.onContinentChange}"
    

    【讨论】:

    • 如果我使用这个表达式,我会检索到另一个错误,例如“在 programController 中不能存在名为 'onContinentChange' 的属性” 这是正确的,因为它是一种方法,而不是具有 get/set 方法的属性。
    • 如果在方法中添加括号会怎样:"#{programController.onContinentChange()}"
    • listener="programController.onContinentChange()" 不起作用
    猜你喜欢
    • 2011-06-29
    • 1970-01-01
    • 2011-11-03
    • 1970-01-01
    • 1970-01-01
    • 2014-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多