1

私は 2 つの Bean クラス vehicletypes を持っており、 vehicletypes からの車は車のクラスに対して 1 つのタイプ名が選択される車のリストです。このタイプ名を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 です。


この方法も試しましたが、これはアクション自体を呼び出しません。

.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のプライベート変数です。「combochange」はcarsbeanのメソッドであり、「veh」は表示される値のリストです。

また、メソッド「combochange」で、イベントを「AjaxBehaviorEvent」に変更してください。あなたはajaxイベントから呼び出しているので、発生するイベントはajax動作イベントです。

お役に立てれば :)

于 2013-03-12T17:10:14.293 に答える