我有两个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;
}
不明白为什么不调用这个动作。
答案 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行为事件。
希望这会有所帮助:)