选择空值时,<p:ajax>不会触发

时间:2015-06-10 19:54:36

标签: jsf-2 primefaces

我有以下p:selectOneMenu:

<p:selectOneMenu widgetVar="selectELclUpdateLcl" style="font-size:11px;"
                    value="#{tabparam.selectedDataEntite}"  appendTo="@this" 
                    id="selectedDataEntite" required="true" requiredMessage="Entité obligatoire" 
                    converter="entiteConverter">

                    <p:ajax event="change" listener="#{tabparam.enableBloc}" update="sBloc sTLocal sEtage" />   

                    <f:selectItem noSelectionOption="true" itemLabel="-- Entités --" value="#{null}"></f:selectItem>
                      <f:selectItems  value="#{tabparam.listDataEntite}" var ="e" 
                      itemLabel="#{e.nom}" itemValue="#{e}" ></f:selectItems>
                    </p:selectOneMenu>

当我选择与null不同的项时,会正确触发ajax事件。但是如果我选择null(选择“ - Entités - ”),则不会触发ajax事件。

以下是我的转换器类:

@FacesConverter(value = "entiteConverter")
public class EntiteConverter implements Converter {

    @Override
    public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {
        Data_Entite ret = null;
        UIComponent src = arg1;
        if (src != null) {
            List<UIComponent> childs = src.getChildren();
            UISelectItems itens = null;
            if (childs != null) {
                for (UIComponent ui : childs) {
                    if (ui instanceof UISelectItems) {
                        itens = (UISelectItems) ui;
                        break;
                    } else if (ui instanceof UISelectItem) {
                        UISelectItem item = (UISelectItem) ui;
                        try {
                            Data_Entite val = (Data_Entite) item.getItemValue();
                            if (arg2.equals("" + val.getId())) {
                                ret = val;
                                break;
                            }
                        } catch (Exception e) {
                        }
                    }
                }
            }

            if (itens != null) {
                List<Data_Entite> values = (List<Data_Entite>) itens.getValue();
                if (values != null) {
                    for (Data_Entite val : values) {
                        if (arg2.equals("" + val.getId())) {
                            ret = val;
                            break;
                        }
                    }
                }
            }
        }
        return ret;
    }

    @Override
    public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {
        String ret = "";
        if (arg2 != null && arg2 instanceof Data_Entite) {
            Data_Entite m = (Data_Entite) arg2;
            if (m != null) {
                int id = m.getId();
                if (id != 0) {
                    ret = Integer.toString(id);
                }
            }
        }
        return ret;
    }

}

请问好吗?我正在使用PF 5.1 感谢。

0 个答案:

没有答案