f:ajax参数传递不起作用,调用action但值始终为NULL

时间:2013-03-12 07:15:59

标签: ajax jsf-2 richfaces

我有两个bean类车型和来自vehicletypes的汽车是一个车辆列表,从中为汽车类选择一个类型名称。所以我通过v.name填充car.xhtml中的列表,使用组合框工作正常。要将此类型名称分配给cars.name,我将使用listerner操作,如下所示:

.XHTML代码

  <h:selectOneMenu>
     <f:selectItems value="#{vehicletypes.veh}" var="v"  itemLabel="#{v.name}" />
     <f:ajax event="change" listener="#{cars.combochange}" />
     <f:param name="idx" value="#{v.name}" />
  </h:selectOneMenu>

管理bean:

public String  getcombochange(FacesContext fc)
    {

          Map<String,String> params =fc.getExternalContext().getRequestParameterMap();
          return params.get("idx");


    }
    public String combochange(){

        String type;
        FacesContext fc = FacesContext.getCurrentInstance();
        type= getcombochange(fc);
        System.out.println("\nChange occured Car type assigned"+type); 
        return "result";
    }

在使用println在控制台上打印cartype的值时,它总是为null,代码中的错误是我试图将defualt字符串作为参数传递但是它也无效。


也尝试过这种方式,但这并没有调用动作本身;

.xhtml

<h:selectOneMenu>
<f:selectItems value="#{vehicletypes.veh}" var="v"  itemLabel="#{v.name}" />
<f:ajax event="change" listener="#{cars.combochange}" />
<f:attribute name="add" value="default" />
</h:selectOneMenu>

Bean类

 public String combochange(ActionEvent event){
         String type = (String)event.getComponent().getAttributes().get("add");
         System.out.println("Add pool:"+type);
         return null;
    }

不明白为什么不调用这个动作。

1 个答案:

答案 0 :(得分:0)

您没有在后端bean中为所选值分配任何值。您只需要修改以下内容。

  <h:selectOneMenu value="#{cars.selectedValue}">
  <f:selectItems value="#{vehicletypes.veh}" />
  <f:ajax listener="#{cars.combochange}" />
  </h:selectOneMenu>

其中“selectedValue”是您的cars bean中的私有变量,其中包含放置所选值的getter / setter。 “combochange”是cars bean中的方法,“veh”是要显示的值列表。

此外,在“combochange”方法中,请将事件更改为“AjaxBehaviorEvent”。因为,您从ajax事件调用,所触发的事件是ajax行为事件。

希望这会有所帮助:)