richfaces valuechange事件不会在selectOneMenu上触发

时间:2017-06-20 11:53:37

标签: jsf richfaces selectonemenu valuechangelistener

我有两个.xhtml页面,每个页面都包含一个表单,用于输入所选对象的数据。它们只在要选择的对象上有所不同。

第一页:

<h:outputText value="Buchung:"/>
<h:selectOneMenu converter="#{orderConverter}" value="#{reportBean.selectedOrder}" valueChangeListener="#{reportBean.valueChange}">
    <f:selectItems value="#{orderBean.privateOrderList}" var="order" itemValue="#{order.ID}"/>
    <a4j:ajax event="valueChange" execute="@this"/>
</h:selectOneMenu>

第二页

<h:outputText value="Auto:"/>
<h:selectOneMenu converter="#{vehicleConverter}" value="#{orderBean.selectedVehicle}" valueChangeListener="#{orderBean.valueChange}">
    <f:selectItems value="#{vehicleBean.vehicleList}" var="vehicle" itemValue="#{vehicle.licenseTag}"/>
    <a4j:ajax event="valueChange" execute="@this"/>
</h:selectOneMenu>

两个backingBeans的valueChange方法基本相同:

ReportBean:

public void valueChange(ValueChangeEvent event){
if(null!=event.getNewValue()) {
    selectedOrder = (Order) event.getNewValue();
    }
}

OrderBean:

public void valueChange(ValueChangeEvent event){
if(null!=event.getNewValue()) {
    selectedVehicle = (Vehicle) event.getNewValue();
    }
}

如您所见,在显示之前转换对象,但转换只是来回转换。应该不是问题,

orderConverter for page 1 for Example:

@ManagedBean
@FacesConverter(value = "orderConverter")
public class OrderConverter extends GenericConverter implements Converter {

@Override
public Object getAsObject(FacesContext facesContext, UIComponent uiComponent, String s) {
    int i = Integer.parseInt(s);
    return OrderDAO.getInstance().findById(i);
}

@Override
public String getAsString(FacesContext facesContext, UIComponent uiComponent, Object o) {
    return  o.toString();
}
} 

vehicleConverter根据传递的字符串查找对象,而不是在之前将其解析为整数。 &#34; toString()&#34;方法在SelectOneMenu中对一些字符串进行重新标识以便识别,所以这不应该是问题。

然而,第2页触发valueChangeEvent而第1页没有触发!

我看到的唯一区别是&#34; itemValue&#34; f:selectItems的属性是第2页的字符串(车辆的licenseTag)和第1页的整数(订单ID)。这是否导致此事件无法触发?如果是这样,当我没有另外的订单标识时,我该如何解决这个问题?

0 个答案:

没有答案