2013-03-12 65 views
1

我有兩個bean類,vehicletypes和vehiclestypes中的汽車是從中爲汽車類選擇一個typename的車輛列表。所以我填充由v.name car.xhtml名單及其工作正常使用組合box.For分配此類型名稱來cars.name我使用listerner動作,如下所示:f:ajax參數傳遞不起作用,動作被調用,但值始終爲空

.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的值,但它始終爲空,代碼中出現什麼錯誤,我試圖將一個被忽略的字符串作爲參數傳遞,但它也不起作用。


已經嘗試過這種方式,但是這不會調用動作本身;

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

不明白爲什麼動作不叫。

+2

參見:http://stackoverflow.com/questions/4782430/how-to-pass-additional-parameters-in-ajax-request-on-change-value-in- hselectone – 757071 2013-03-12 07:48:49

回答

0

您尚未在所選值的後端bean中分配任何值。您只需修改以下內容即可。

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

哪裏「了selectedValue」是在你的汽車用豆的getter/setter方法私有變量,其中所選擇的值放置。 「combochange」是cars bean中的方法,「veh」是要顯示的值的列表。

另外,在「combochange」方法中,請將事件更改爲「AjaxBehaviorEvent」。因爲你從ajax事件中調用,所觸發的事件是ajax行爲事件。

希望這有助於:)