自动完成 Primefaces 不记录到数据库
Autocomplete Primefaces not record to database
我正在使用:
- Primefaces 4.0
- Netbeans 8.0.1
- Omnifaces 2.1
- JSF 2.2
- 休眠 4.3.1
并且我在primefaces中实现了一个Autocomplete,视图显示了来自数据库的列表,但是此刻要记录到数据库中,结果是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();
}
我的豆子:
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>
我正在使用:
- Primefaces 4.0
- Netbeans 8.0.1
- Omnifaces 2.1
- JSF 2.2
- 休眠 4.3.1
并且我在primefaces中实现了一个Autocomplete,视图显示了来自数据库的列表,但是此刻要记录到数据库中,结果是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();
}
我的豆子:
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>