我已经处理这个问题很长一段时间了。当我在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中的item时,我只是想在console中写一些东西。
注意:我只发布了与此问题相关的代码。
发布于 2018-05-31 19:32:09
在一个大的主窗体中包含事件处理或其他覆盖组件的对话框出现了许多问题之后,我最终得到了以下模式:对于单独的组件,使用、独立窗体、。每个对话框一个窗体。窗体中嵌入的对话框。
你的事件符号看起来没问题,我应该可以工作。如果事件有效而更新无效:您也可以尝试更新父组件,而不是输入组件(例如,@form或@parent或noviTerminPanel。
祝好运。
https://stackoverflow.com/questions/50600161
复制相似问题