Primefaces selectonemenu на событие изменения не работает - PullRequest
0 голосов
/ 30 мая 2018

Я уже давно занимаюсь этим.Когда я выбираю элемент в 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 голосов
/ 31 мая 2018

После множества проблем с диалогами, содержащими обработку событий или другие наложенные компоненты в одной большой главной форме, я получил следующий шаблон: Отдельные формы для отдельных компонентов.Одна форма на диалог.Диалог встроен в форму.

Ваша запись события выглядит нормально и ИМХО должна работать.Если событие работает, а обновление - нет: вы также можете попробовать обновить родителей вместо компонентов ввода (например, @form или @parent или noviTerminPanel.

Удачи.

...