【问题标题】:Calling two different functions based on h:selectOneMenu value根据 h:selectOneMenu 值调用两个不同的函数
【发布时间】:2012-03-26 15:27:33
【问题描述】:

我正在使用 MyFaces 2.0.12 和 RichFaces 3.3.3。当用户更改 h:selectOneMenu 的选择时,我需要在 BackBean (Session scope) 中调用两个不同的函数。以前我是这样做的:

    <h:selectOneMenu
         value="#{customer.recordsDisplayed}"                                       
        valueChangeListener="#{customer.onRecordsPerPageChange}"
        onchange="submit()"
        <f:selectItems value="#{customer.rppValues}" />
    </h:selectOneMenu>

在backbean中:

    public void onRecordsPerPageChange(ValueChangeEvent vce){
        
        if(this.searchFlagAdvance)
            searchMethodA();
        else
            searchMethodB();
    }

我理解上述内容是错误的,因为您不打算在 ValueChangeEvent 阶段调用逻辑或更改 backbean 值

所以我的问题是正确的方法是什么?由于上面的代码,我遇到了 backbean 值为 null 并且整个事情都平淡无奇的情况。

更新:

我将我的代码更改为以下代码并且运行良好。我只想知道以下是否是好的做法。

    public void onRecordsPerPageChange(ActionEvent event) {
         String value =(String) ((EditableValueHolder) event.getComponent().getParent()).getValue();
         
         this.value = value;
         if(searchFlagA)
            searchMethodA();
        else
            searchMethodB();
    }

并将 JSP 代码更改为:

    <h:selectOneMenu
         id="selectRecordDisplay"
         value="#{customer.recordsDisplayed}"                         
        <f:selectItems value="#{customer.rppValues}" />
        <a4j:support event="onchange" actionListener="#{customer.onRecordsPerPageChange}" reRender="pangelgrid"></a4j:support> 
    </h:selectOneMenu>

【问题讨论】:

  • 很抱歉漏掉了 - 是的。 myFaces 2.0.12 和 RichFaces 3.3.3。更新了我的问题

标签: java ajax jsf jsf-2


【解决方案1】:

由于您使用的是 JSF 2.0,因此可以使用 ajax:

<h:selectOneMenu value="#{customer.recordsDisplayed}">
  <f:selectItems value="#{customer.rppValues}" />
  <f:ajax action="#{customer.onRecordsPerPageChange}" 
          execute="idsToBeProcessed"
          render="idsToBeRendered"/>
</h:selectOneMenu>

使用 fologin 操作方法:

public void onRecordsPerPageChange(AjaxBehaviorEvent event) {
 ...
}

execute 属性列表中,需要在服务器端处理的所有组件的ID(空格分隔),尤其是您的侦听器方法所依赖的组件。 render 属性获取 ajax 调用返回时需要重新渲染的所有组件 ID。如果您将@form 放在一个或两个属性中,整个表单将被处理/呈现。

【讨论】:

  • 我似乎在您提供答案的同时更新了我的问题。能否请您看一下更新并将更新后的代码与您自己提供的代码进行比较?
  • 您的代码看起来不错。或者,您可以使用 JSF 2.0 的内置 ajax 标签。
猜你喜欢
  • 1970-01-01
  • 2015-08-07
  • 2016-08-17
  • 1970-01-01
  • 1970-01-01
  • 2022-11-15
  • 2015-07-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多