关于更改事件不起作用的primefaces selectonemenu

时间:2018-05-30 08:43:20

标签: ajax primefaces dropdown selectonemenu

我已经在很长一段时间内处理过这个问题了。当我在selectOneMenu中选择一个项目时,我想更新另一个具有特定值的selectOneMenu,但它无效。

XHTML:

<p:dialog id="noviTermin_dlg" header="Upisi podatke o terminu" widgetVar="termin_dlg" modal="true"
        height="250" width="500">
        <h:panelGroup id="noviTerminPanel">
            <p:panelGrid columns="2">
                <h:outputText value="Pacijent:" />
                <p:selectOneMenu id="pacijentiList" value="#{termini.selectedPacijent}" 
                    filter="true" filterMatchMode="contains">
                    <p:ajax listener="#{termini.writeSomething}"
                        update="bolestiList" />
                    <f:selectItem itemLabel="Odaberi pacijenta" itemValue="" noSelectionOption="true" />
                    <f:selectItems value="#{termini.pacijenti_list}" var="pacijent"
                        itemLabel="#{pacijent.pacijent_prezime} #{pacijent.pacijent_ime}"
                        itemValue="#{pacijent}" />
                </p:selectOneMenu>
                <h:outputText value="Bolest:" />
               <p:selectOneMenu id="bolestiList" value="#{termini.selectedBolest}"
                    filter="true" filterMatchMode="contains" disabled="#{empty selectedPacijent}">
                    <f:selectItem itemLabel="Odaberi bolest" itemValue="" noSelectionOption="true" />
                    <f:selectItems value="#{termini.bolesti_list}" var="bolest"
                        itemLabel="#{bolest.naziv_bolesti}"
                        itemValue="#{bolest}" />
                </p:selectOneMenu>
                <h:outputText value="Vrijeme pocetka:" />
                <pe:timePicker mode="popup" />
                <h:outputText value="Vrijeme kraja:" />
                <pe:timePicker mode="popup" />
                <f:facet name="footer">
                    <p:commandButton value="Spremi" icon="fa fa-save"
                        process="noviTerminPanel"
                        update="table_termini"
                        oncomplete="PF('termin_dlg').hide();"></p:commandButton>
                </f:facet>
            </p:panelGrid>
        </h:panelGroup>
    </p:dialog>

ManagedBean:

@ManagedBean(name="termini")
@ViewScoped
public class TerminiBean implements Serializable{

    private List<Pacijenti> pacijenti_list;
    private Pacijenti selectedPacijent;
    private List<PovijestBolesti> bolesti_list;
    private PovijestBolesti selectedBolest;
    //+get set

   public void writeSomething() {
    System.out.println("adasd");
}

转换器:

    @FacesConverter(forClass=Pacijenti.class)
public class PacijentiConverter implements Converter {

    @Override
    public Object getAsObject(FacesContext fc, UIComponent uic, String value) {
        if(value != null && value.trim().length() > 0) {
            try {
                if (value == null || value.isEmpty()) {
                    return null;
                }

                try {
                    Pacijenti pac = new Pacijenti();
                    for(Pacijenti p : CommonServices.fetchPacijentiFromDB()) {
                        if(value == p.getPacijent_id()) {
                            pac = p;
                        }
                    }
                    return pac;
                } catch (Exception e) {
                    throw new ConverterException(new FacesMessage(value + " is not a valid Warehouse ID"), e);
                }
            } catch(NumberFormatException e) {
                throw new ConverterException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Conversion Error", "Not a valid theme."));
            }
        }
        else {
            return null;
        }
    }

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object value) {

        if (value == null) {
            return "";
        }

        if (value instanceof Pacijenti) {
            return String.valueOf(((Pacijenti) value).getPacijent_id());
        } else {
            throw new ConverterException(new FacesMessage(value + " is not a valid Warehouse"));
        }
    }
}

在这个例子中,当我点击selectOneMenu中的项目时,我只是想在控制台中写一些东西。

注意:我们只发布了与此问题相关的代码。

1 个答案:

答案 0 :(得分:1)

在包含事件处理或其他叠加组件的对话框出现大量问题之后,我得到了以下模式:单独的表单用于单独的组件。每个对话框一个表单。对话形式嵌入。

您的活动符号看起来不错,应该恕我直言。 如果事件有效并且更新没有:您还可以尝试更新父项而不是输入组件(例如@form或@parent或noviTerminPanel。

祝你好运。