1

我有两个bean类vehicletypes和cars from vehicletypes是一个车辆列表,从中选择一个类型名作为汽车类。所以我用v.name填充car.xhtml中的列表,使用组合框工作正常。用于分配这个 typename 到 cars.name 我正在使用侦听器操作,如下所示:

.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>

托管豆:

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 的值时,它始终为空,代码中有什么问题我试图将默认字符串作为参数传递,但它也不起作用。


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

.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>

豆类

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

不明白为什么不调用该动作。

4

1 回答 1

0

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

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

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

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

希望这可以帮助 :)

于 2013-03-12T17:10:14.293 回答