首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >更改事件上的primefaces selectonemenu不起作用

更改事件上的primefaces selectonemenu不起作用
EN

Stack Overflow用户
提问于 2018-05-30 16:43:20
回答 1查看 1.4K关注 0票数 1

我已经处理这个问题很长一段时间了。当我在selectOneMenu中选择一个项目时,我想用特定值更新另一个selectOneMenu,但它不起作用。

xhtml:

代码语言:javascript
复制
<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:

代码语言:javascript
复制
@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");
}

转换器:

代码语言:javascript
复制
    @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中的item时,我只是想在console中写一些东西。

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

EN

回答 1

Stack Overflow用户

发布于 2018-05-31 19:32:09

在一个大的主窗体中包含事件处理或其他覆盖组件的对话框出现了许多问题之后,我最终得到了以下模式:对于单独的组件,使用、独立窗体、。每个对话框一个窗体。窗体中嵌入的对话框。

你的事件符号看起来没问题,我应该可以工作。如果事件有效而更新无效:您也可以尝试更新父组件,而不是输入组件(例如,@form或@parent或noviTerminPanel。

祝好运。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50600161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档