java - 自动完成 Primefaces 不记录到数据库

标签 java hibernate jsf primefaces omnifaces

我正在使用:

  • Primefaces 4.0
  • Netbeans 8.0.1
  • Omnifaces 2.1
  • JSF 2.2
  • hibernate 4.3.1

我在primefaces中实现了一个自动完成功能, View 显示了数据库中的列表,但此时记录到数据库中,结果是id为空

这是我的代码:

<h:form id="formInsertar">
            <p:messages autoUpdate="true"/>
            <p:panelGrid columns="2">
                <p:outputLabel value="Id:" />
                <p:inputText value="#{usuarioBean.usuario.id}" disabled="true"/>
                <p:outputLabel value="Nombre:" />
                <p:inputText value="#{usuarioBean.usuario.nombre}" />
                <p:outputLabel value="Buscar x tipo" for="tipo"/>
                <p:autoComplete id="tipo" value="#{usuarioBean.usuario.tipousuario}" converter="omnifaces.SelectItemsConverter"
                                completeMethod="#{tipoUsuarioBean.completarTipo}" var="t"
                                itemLabel="#{t.nombre}" itemValue="#{t}">

                </p:autoComplete>
                <p:outputLabel value="Login:" />
                <p:inputText value="#{usuarioBean.usuario.login}" />
                <p:outputLabel value="Clave:" />
                <p:inputText value="#{usuarioBean.usuario.clave}" />
                <p:outputLabel value="eMail:" />
                <p:inputText value="#{usuarioBean.usuario.email}" />
            </p:panelGrid>
            <p:commandButton value="Crear" update=":formMostrar" actionListener="#{usuarioBean.insertar()}" 
                             />
        </h:form>

我的道:

@Override
public List<Tipousuario> buscarxNombre(String nombre) {
    Session session = HibernateUtil.getSessionFactory().openSession();
    Criteria criteria = session.createCriteria(Tipousuario.class);
    if (StringUtils.isNotBlank(nombre)){
        criteria.add(Restrictions.ilike("nombre",nombre.toUpperCase(),MatchMode.ANYWHERE));
    }
    return criteria.list();
}

我的 bean :

public List<Tipousuario> completarTipo(String nombre){
    TipoUsuarioDao tipodao = new TipoUsuarioDaoImp();
    tipousuarios = tipodao.buscarxNombre(nombre);
    return tipousuarios;
}

错误:

WARN: SQL Error: 515, SQLState: 23000 ERROR: No se puede insertar el valor NULL en la columna 'tipousuario_id', tabla 'miApp.dbo.usuario'. La columna no admite valores NULL. Error de INSERT. Información: could not execute statement

拜托,我需要一些帮助。谢谢

PD:抱歉我的英语不好。

最佳答案

好吧,我解决了。 后续步骤:

  • 自动完成的正确属性是 ListConverter 而不是 SelectItemsConverter
  • 替代方法如下:

    <p:outputLabel value="Buscar x tipo" for="tipo"/>
        <p:autoComplete id="tipo"
                        value="#{usuarioBean.usuario.tipousuario}" 
                        completeMethod="#{tipoUsuarioBean.completarTipo}" 
                        var="t"
                        itemLabel="#{t.nombre}"
                        itemValue="#{t}"
                        forceSelection="true">
    
            <o:converter converterId="omnifaces.ListConverter"
                         list="#{tipoUsuarioBean.tipousuarios}"/>
    
            <p:ajax event="itemSelect" process="@form" />
        </p:autoComplete>
    

关于java - 自动完成 Primefaces 不记录到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32059695/

相关文章:

java - session 室数据库,用于在运行时存储不同的 Activity 数据

java - 如何转换 Spring Data JPA 查询返回的 [Ljava.lang.Object

java - Jndi异常 : Error parsing JNDI name in Standalone Application

java - 找不到从中引用的标识符为 ":form:display"的组件

java - 如何向 Firestore 中已有的数组添加一个值,该数组已经具有这个确切的值,而不包含 "overwriting"?

java - Java 是否通过引用传递?

java - Hibernate 延迟加载单列

jsf - SelectCheckboxMenu - 禁用 "all-selection"

java - 存储登录用户 ID 的最佳方法

java - Libgdx - Tiledmap 渲染的图 block 从屏幕上消失