任何人都可以帮我创建一个转换来评估SelectOneMenu的数据并返回匹配的数据吗?
我目前有一个,但是当我运行我的应用程序时,它会抛出以下错误:“null Converter'的转换错误设置值'1'。”
我添加了一个带有System.out.println()的控件来显示渲染器正在处理的内容,但它甚至没有进入转换类。
我的课程如下:
@FacesConverter("conversorMovil")
public class ConversorMovil implements Converter {
private Session sesion;
private Transaction transaccion;
@Override
public Object getAsObject(FacesContext fc, UIComponent uic, String value){
if(value != null && value.trim().length() > 0) {
try {
this.sesion = HibernateUtil.getSessionFactory().openSession();
this.transaccion = sesion.beginTransaction();
DaoMovil daoM = new DaoMovil();
//Moviles movil = (Moviles) fc.getExternalContext().getApplicationMap().get("mbMovil");
Moviles movil=null;
try {
movil = daoM.buscarPorCodigo(this.sesion, Integer.parseInt(value));
this.transaccion.commit();
} catch (Exception ex) {
Logger.getLogger(ConversorMovil.class.getName()).log(Level.SEVERE, null, ex);
}
System.out.println("Valor devuelto por getAsObject()" + movil.toString());
return movil;
}catch(NumberFormatException e) {
throw new ConverterException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Conversion Error", "Not a valid theme."));
}finally{
this.sesion.close();
}
}
else{
return null;
}
}
@Override
public String getAsString(FacesContext fc, UIComponent uic, Object object) {
if(object != null) {
System.out.println("Valor devuelto por getAsString()" + String.valueOf(((Moviles) object).getIdmovil()));
return String.valueOf(((Moviles) object).getIdmovil());
}
else {
return null;
}
}
}
此转换器应返回数据库中加载的车辆数据。
我的xhtml是:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:c="http://xmlns.jcp.org/jsp/jstl/core">
<body>
<ui:composition template="./../plantilla/plantilla.xhtml">
<ui:define name="content">
<h:form id="frmNuevoVale">
<p:commandButton value="Nuevo Vale" onclick="PF('dialogoNuevoVale').show();"/>
</h:form>
<h2>Lista de Vales</h2>
<h:form id="frmListaVales">
<p:growl id="mensajeGeneral" showDetail="true" sticky="false"/>
<p:dataTable id="tablaVales" var="fila" value="#{mbVale.todos}" paginator="true" rows="10" selection="#{mbVale.vale}" selectionMode="single" rowKey="#{fila.idvale}">
<p:ajax event="rowSelect" update=":frmListaVales:detalleVale" oncomplete="PF('dialogoVale').show();"/>
<f:facet name="cabecera">
Lista de Vales
</f:facet>
<p:column headerText="Número de Vale:">
<h:outputText value="#{fila.idvale}" style="float:right"/>
</p:column>
<p:column headerText="Fecha Emisión">
<h:outputText value="#{fila.fechaemision}" style="float:right"/>
</p:column>
<p:column headerText="Guardia">
<h:outputText value="#{fila.guardias.idguardia}"/>
</p:column>
<p:column headerText="Anulado">
<!-- <h:outputText value="#{fila.baja}"/> -->
<p:graphicImage value="/resources/iconos/aceptar.ico" rendered="#{fila.anulado == true}" style="center"/>
</p:column>
<p:column headerText="Fecha de Baja">
<h:outputText value="#{fila.fechaanulacion}"/>
</p:column>
<p:column>
<p:commandButton value="Editar" actionListener="#{mbVale.buscarValeEditar(fila.idvale)}"/>
</p:column>
<p:column>
<p:commandButton value="Dar de Baja" actionListener="#{mbVale.buscarValeBaja(fila.idvale)}"/>
</p:column>
</p:dataTable>
<p:dialog header="Detalle de Vale" widgetVar="dialogoVale" resizable="false" width="300" showEffect="explode" hideEffect="explode">
<p:panelGrid id="detalleVale" columns="2">
<p:outputLabel value="Número de Vale:"/>
<h:outputText value="#{mbVale.vale.idvale}"/>
<p:outputLabel value="Fecha de Emisión:"/>
<h:outputText value="#{mbVale.vale.fechaemision}"/>
<p:outputLabel value="Emisor:"/>
<h:outputText value="#{mbVale.vale.guardias.idguardia}"/>
<p:outputLabel value="Anulado:"/>
<h:outputText value="#{mbVale.vale.anulado}"/>
<p:outputLabel value="Fecha de Baja:"/>
<h:outputText value="#{mbVale.vale.fechaanulacion}"/>
</p:panelGrid>
</p:dialog>
</h:form>
<h:form id="frmAltaVale">
<p:dialog header="Nuevo Vale" widgetVar="dialogoNuevoVale" resizable="false" width="900" showEffect="explode" hideEffect="explode" >
<p:panelGrid id="nuevoVale" columns="3">
<p:outputLabel value="Número de Vale:" for="txtIdentificador"/>
<p:outputLabel id="txtIdentificador" value="#{mbVale.vale.idvale}">
<!--<f:validator validatorId="validadorVacio"/>-->
</p:outputLabel>
<p:message for="txtIdentificador"/>
<p:outputLabel for="txtMovil" value="Móvil:"/>
<p:selectOneMenu id="txtMovil" value="#{mbVale.vale.moviles}" style="width:175px" converter="#{conversorMovil}">
<f:selectItem itemLabel="Seleccionar" itemValue="" />
<f:selectItems value="#{mbMovil.todos}" var="mov" itemValue ="#{mov.idmovil}" itemLabel = "#{mov.descripcion}"/>
</p:selectOneMenu>
<p:message for="txtMovil"/>
<p:outputLabel for="txtChofer" value="Chofer:" />
<p:selectOneMenu id="txtChofer" value="#{mbChofer.chofer.idchofer}" style="width:175px">
<f:selectItem itemLabel="Seleccionar" itemValue="" />
<f:selectItems value="#{mbChofer.todos}" var="chof" itemValue ="#{chof.idchofer}" itemLabel = "#{chof.nombre}"/>
</p:selectOneMenu>
<p:message for="txtChofer"/>
<p:outputLabel for="txtCombustible" value="Combustible:" />
<p:selectOneMenu id="txtCombustible" value="#{mbCombustible.combustible.idcombustible}" style="width:175px">
<f:selectItem itemLabel="Seleccionar" itemValue="" />
<f:selectItems value="#{mbCombustible.todos}" var="comb" itemValue ="#{comb.idcombustible}" itemLabel = "#{comb.descripcion}"/>
</p:selectOneMenu>
<p:message for="txtCombustible"/>
<p:outputLabel for="txtProveedor" value="Proveedor:" />
<p:selectOneMenu id="txtProveedor" value="#{mbProveedor.proveedor.idproveedor}" style="width:175px">
<f:selectItem itemLabel="Seleccionar" itemValue="" />
<f:selectItems value="#{mbProveedor.todos}" var="prov" itemValue ="#{prov.idproveedor}" itemLabel = "#{prov.descripcion}"/>
</p:selectOneMenu>
<p:message for="txtProveedor"/>
<p:outputLabel value="Kilómetros:" for="txtKilometros"/>
<p:inputText id="txtKilometros" label="Nombre" value="#{mbVale.vale.kilometros}">
<f:validator validatorId="validadorVacio"/>
</p:inputText>
<p:message for="txtKilometros"/>
<p:outputLabel value="Litros:" for="txtLitros"/>
<p:inputText id="txtLitros" label="Nombre" value="#{mbVale.vale.litros}">
<f:validator validatorId="validadorVacio"/>
</p:inputText>
<p:message for="txtLitros"/>
<p:commandButton value="Registrar Vale" actionListener="#{mbVale.registrar()}" update="nuevoVale,:frmListaVales"/>
</p:panelGrid>
</p:dialog>
</h:form>
<h:form id="frmEditarVale">
<p:dialog header="Editar Vale" widgetVar="dialogoEditarVale" modal="true" resizable="false" width="900" showEffect="explode" hideEffect="explode" >
<p:panelGrid id="editarVale" columns="3">
<p:outputLabel value="Número de Vale:" for="txtIdentificador"/>
<p:outputLabel id="txtIdentificador" value="#{mbVale.vale.idvale}"/>
<p:message for="txtIdentificador"/>
<p:outputLabel value="Fecha de Emisión:" for="txtEmision"/>
<p:inputText id="txtEmision" label="legajo" value="#{mbVale.vale.fechaemision}">
<f:validator validatorId="validadorCero"/>
</p:inputText>
<p:message for="txtEmision"/>
<p:outputLabel value="Kilómetros:" for="txtKilometros"/>
<p:inputText id="txtKilometros" label="Nombre" value="#{mbVale.vale.kilometros}">
<f:validator validatorId="validadorVacio"/>
</p:inputText>
<p:message for="txtKilometros"/>
<p:commandButton value="Confirmar Edición" actionListener="#{mbVale.modificarVale()}" update=":frmListaVales,editarVale"/>
</p:panelGrid>
</p:dialog>
</h:form>
<!-- Formulario para dar de baja choferes -->
<h:form id="frmBajaVale">
<p:dialog header="Dar de Baja Vale" widgetVar="dialogoBajaVale" resizable="false" showEffect="explode" hideEffect="explode" modal="true">
<p:panelGrid id="bajaVale" columns="3">
<p:outputLabel value="Número de Vale:" for="txtIdentificador"/>
<p:outputLabel id="txtIdentificador" value="#{mbVale.vale.idvale}"/>
<p:message for="txtIdentificador"/>
<p:outputLabel value="Emisión:" for="txtEmision"/>
<p:outputLabel id="txtEmision" value="#{mbVale.vale.fechaemision}"/>
<p:message for="txtEmision"/>
<p:outputLabel value="Kilómetros:" for="txtKilometros"/>
<p:outputLabel id="txtKilometros" value="#{mbVale.vale.kilometros}"/>
<p:message for="txtKilometros"/>
<h:panelGroup/>
<h:outputText value="¿Realmente desea dar de baja a este registro? "/>
<h:panelGroup/>
<p:commandButton value="Si" icon="ui-icon-borrar" actionListener="#{mbVale.bajaVale()}" update=":frmListaVales,bajaVale"/>
<p:commandButton value="No" icon="ui-icon-cancelar" oncomplete="PF('dialogoBajaVale').hide();"/>
</p:panelGrid>
</p:dialog>
</h:form>
</ui:define>
<ui:define name="bottom">
</ui:define>
</ui:composition>
</body>
我使用它的观点是“frmAltaVales”。
我想选择一辆车(movil),并将其ID传递给优惠券类。
我希望你能帮助我。
答案 0 :(得分:1)
你应该传递转换器的id,而不是转换器作为bean: 不要使用:
converter="#{conversorMovil}"
使用
converter="conversorMovil"