java - 有人可以帮我从数据库中收取 SelectOneMenu 费用吗?

标签 java jsf

任何人都可以帮助我创建一个转换来评估 SelectOneMenu 的数据并返回匹配的数据吗?

我目前有一个,但当我运行应用程序时,它会抛出以下错误:“‘null Converter’的转换错误设置值‘1’。”

我添加了一个带有 System.out.println() 的控件来显示渲染器正在处理的内容,但它甚至没有进入转换类。

我的类(class)如下:

@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 传递给 Vouchers 类。

希望你能帮助我。

最佳答案

您应该传递转换器的 id,而不是将转换器作为 bean 传递: 不要使用:

converter="#{conversorMovil}"

使用

converter="conversorMovil"

关于java - 有人可以帮我从数据库中收取 SelectOneMenu 费用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43478298/

相关文章:

java - 手动实现 Oauth2 授权代码授予流程

jsf - h :button and h:commandButton 之间的差异

java.lang.NoSuchMethodError : javax. ws.rs.core.Application.getProperties()Ljava/util/Map

jsf - <f :facet> do and when should I use it? 是什么意思

jsf - Glassfish 3 + 耳朵 + logback.xml

java - 在 session 过期之前调用方法

jsf - j_security_check 直接调用

java - 如何计算当前系统时间和存储时间间隔

java - Java Swing 组件上的 Z 顺序

java - 使用自定义代码重新填充缓存而不是 Spring + Quartz 集成