我是使用 JSF 和 primefaces 的新手。我有一个包含 3 个 selectOneMenus 的表单,它们分别由三个转换器填充。
保存数据时保存得很好,但是当在同一个表单上恢复未显示的 selectOneMenu 元素时。虽然如果正确加载对象相关。
转换器
@FacesConverter(value = "auxiliarConvertir")
public class AuxiliarConvertir implements Converter {
public static AuxiliarDao auxiliarDAO = new AuxiliarDaoImpl();
private AuxiliarMB auxiliarMB;
@Override
public Object getAsObject(FacesContext facesContext, UIComponent component,
String submittedValue) {
if (submittedValue.trim().equals("")) {
return null;
} else {
try {
auxiliarMB = (AuxiliarMB) facesContext
.getELContext()
.getELResolver()
.getValue(facesContext.getELContext(), null,
"auxiliarBean");
List<Auxiliar> listaAuxiliar = auxiliarMB.getTabla();
String number = submittedValue;
for (Auxiliar p : listaAuxiliar) {
if (p.getAuxiliarCodigo().equals(number)) {
return p;
}
}
} catch (NumberFormatException exception) {
throw new ConverterException(new FacesMessage(
FacesMessage.SEVERITY_ERROR, "Conversion Error",
"Not a valid player"));
}
}
return null;
}
@Override
public String getAsString(FacesContext facesContext, UIComponent component,
Object value) {
if (value == null || value.equals("")) {
return "";
} else {
return String.valueOf(((Auxiliar) value).getAuxiliarCodigo());
}
}
}
XHTML
<p:column colspan="2">
<p:selectOneMenu id="auxiliares"
value="#{comprasBean.auxiliar}" converter="auxiliarConvertir"
panelStyle="width:550px" effect="fade" var="p"
style="width:95px" filter="true" filterMatchMode="startsWith">
<p:ajax update="razonSocial" listener="#{comprasBean.pinta}" />
<f:selectItem itemLabel="Elija" itemValue="" />
<f:selectItems value="#{auxiliarBean.tabla}" var="auxi"
itemLabel="#{auxi.auxiliarCodigo}" itemValue="#{auxi}" />
<p:column>
#{p.auxiliarCodTribut}
</p:column>
<p:column>
#{p.auxiliarRazonSocial} #{p.auxiliarApellidoP} #{p.auxiliarApellidoM} #{p.auxiliarNombre1}
</p:column>
</p:selectOneMenu>
</p:column>
如果您需要其他信息,请告诉我。感谢您花时间帮助他人。