1
Hi, guys. I’m having a problem storing livestock records at the bank. The situation is as follows: I have two Selectonemenu on my screen where one is dependent on the other. One is to indicate the type and the other to indicate the breed of a cattle. On the dependency, I managed to do correct, but when I saved, in the database, in the race field, is being saved the entire object instead of saving only the name of the race. I want you to save only the name of the race.
Below are the codes that are related to the xhtml page. I believe the problem is in the Carregarraca do Cadastrogadobean or in one of the two converters.
Cadastrogado.xhtml
<ui:define name="titulo">#{cadastroGadoBean.editando ? "Edição de Gado" : "Novo Gado"}</ui:define>
<ui:define name="corpo">
<f:metadata>
<o:viewParam name="gado" value="#{cadastroGadoBean.gado}"/>
<f:event listener="#{cadastroGadoBean.inicializar}" type="preRenderView"/>
</f:metadata>
<h:form>
<h1>#{cadastroGadoBean.editando ? "Edição de Gado" : "Novo Gado"}</h1>
<p:messages autoUpdate="true" closable="true" />
<p:toolbar style="margin-top: 20px">
<p:toolbarGroup>
<p:button value="Novo" outcome="/gado/CadastroGado" />
<p:commandButton value="Salvar" id="botaoSalvar"
action="#{cadastroGadoBean.salvar}" update="@form" />
</p:toolbarGroup>
<p:toolbarGroup align ="right">
<p:button value="Pesquisar" outcome="/gado/PesquisaGado"/>
</p:toolbarGroup>
</p:toolbar>
<p:panelGrid columns="2" id="painel"
style="width: 100%; margin-top: 20px" columnClasses="rotulo, campo">
<p:outputLabel value="TipoGado" for="tipogado"/>
<p:selectOneMenu id="tipogado" value="#{cadastroGadoBean.gado.tipogado}" label="Tipo"
required="true" requiredMessage="Informe o tipo do gado">
<f:selectItem itemLabel="" noSelectionOption = "true"/>
<f:selectItems
value="#{cadastroGadoBean.listTipo}" var="tipogado"
itemValue="#{tipogado}" itemLabel="#{tipogado.nomeTipo}" />
<p:ajax listener="#{cadastroGadoBean.carregarRacas}" update="gadoRaca"/>
</p:selectOneMenu>
<p:outputLabel value="Raca" for="gadoRaca"/>
<p:selectOneMenu id="gadoRaca" value="#{cadastroGadoBean.gado.gadoRaca}" required="true" requiredMessage="Informe a raça do gado">
<f:selectItem itemLabel=""/>
<f:selectItems value="#{cadastroGadoBean.listRaca}" var ="raca"
itemValue="#{raca}" itemLabel="#{raca.nome}"/>
</p:selectOneMenu>
<p:outputLabel value="Peso(em Kg)" for="gadoPeso" />
<p:inputMask id="gadoPeso" size="10" maxlength="80"
value="#{cadastroGadoBean.gado.gadoPeso}" required="true" mask="999"
requiredMessage="Por favor, informe o peso do gado">
<f:convertNumber minFractionDigits="2" />
<f:validateDoubleRange minimum="1" maximum="999"/>
</p:inputMask>
<p:outputLabel value="Sexo" for="sexo" />
<p:selectOneRadio id="sexo" value="#{cadastroGadoBean.gado.sexo}" required="true"
requiredMessage="Por favor, informe o sexo do gado">
<f:selectItem itemLabel="Macho" itemValue="Macho"/>
<f:selectItem itemLabel="Fêmea" itemValue="Fêmea"/>
</p:selectOneRadio>
<p:outputLabel value="Nascimento" for="gadoNasc" />
<p:calendar id="gadoNasc" size="10" pattern="dd/MM/yyyy"
value="#{cadastroGadoBean.gado.gadoNasc}" maxdate="#{cadastroGadoBean.dataAtual}"
locale="pt_BR" required="true"
requiredMessage="Por favor, informe a data de nascimento"/>
<p:outputLabel value="Finalidade do Gado" for="gadoFinalidade" />
<p:inputText id="gadoFinalidade" size="20" maxlength="80"
value="#{cadastroGadoBean.gado.gadoFinalidade}" required="true"
requiredMessage="Por favor, informe a finalidade do gado"
validatorMessage="formato de nome inválido">
<f:validateRegex pattern="^[A-Za-záàâãéèêíïóôõöúçñÁÀÂÃÉÈÍÏÓÔÕÖÚÇÑ ]+$"/>
</p:inputText>
<p:outputLabel value="Tag" for="tag"/>
<p:selectOneMenu value="#{cadastroGadoBean.gado.tag}" label="Tag" id="tag" filter="true" filterMatchMode="contains" required="true"
requiredMessage="Informe a tag que será acoplada ao gado">
<f:selectItem itemLabel="Selecione" noSelectionOption = "true"/>
<f:selectItems
value="#{cadastroGadoBean.listTags}"
var="tag"
itemValue="#{tag}"
itemLabel="#{tag.descricao}" />
</p:selectOneMenu>
<p:outputLabel value="Usuario" for="usuario"/>
<p:selectOneMenu value="#{cadastroGadoBean.gado.usuario}" label="Usuario" id="usuario" filter="true" filterMatchMode="contains"
required="true"
requiredMessage="Informe o proprietário do gado">
<f:selectItem itemLabel="Selecione" noSelectionOption = "true"/>
<f:selectItems
value="#{cadastroGadoBean.listUsuario}"
var="usuario"
itemValue="#{usuario}"
itemLabel="#{usuario.nome}" />
</p:selectOneMenu>
</p:panelGrid>
</h:form>
</ui:define>
Cadastrogadobean.java
@Named
@ViewScoped
public class CadastroGadoBean implements Serializable {
private static final long serialVersionUID = 1L;
@Inject
private TipoGadoRep tipoGados;
@Inject
private RacaRep racarep;
@Inject
private TagsRep tagsRep;
@Inject
private UsuariosRep usuarios;
@Inject
private CadastroGadoService cadastroGadoService;
private Gado gado;
private Tag tag;
private Usuario usuario;
private TipoGado tipogado;
private Raca raca;
private List<SelectItem> listTipo;
private List<SelectItem> listRaca;
private List<SelectItem> listTags;
private List<SelectItem> listUsuario;
public Date getDataAtual() {
return new Date();
}
public CadastroGadoBean() {
limpar();
}
public boolean isEditando() {
boolean resultado = false;
if (this.gado != null) {
resultado = gado.getGadoId() != null;
}
return resultado;
}
public void inicializar() {
listTipo = new ArrayList<SelectItem>();
listTags = new ArrayList<SelectItem>();
listUsuario = new ArrayList<SelectItem>();
List<TipoGado> tipos = tipoGados.raizes();
List<Tag> tags = tagsRep.raizes();
List<Usuario> listaUsu = usuarios.listaDeUsu();
for (TipoGado tg : tipos) {
SelectItem item = new SelectItem();
item.setLabel(tg.getNomeTipo());
item.setValue(tg);
listTipo.add(item);
System.out.println(listTipo);
}
for (Tag t : tags) {
SelectItem item = new SelectItem();
item.setLabel(t.getDescricao());
item.setValue(t);
listTags.add(item);
System.out.println(listTags);
}
for (Usuario u : listaUsu) {
SelectItem item = new SelectItem();
item.setLabel(u.getNome());
item.setValue(u);
listUsuario.add(item);
}
if(!isEditando()){
gado.setgadoStatus("Ativo");
}
if (this.tipogado != null) {
tipos = tipoGados.raizes();
}
}
public void limpar() {
gado = new Gado();
listTags = new ArrayList<SelectItem>();
}
public void salvar() {
this.gado = cadastroGadoService.salvar(this.gado);
limpar();
FacesUtil.addInfoMessage("Gado salvo com sucesso!");
}
public void carregarRacas(){
listRaca = new ArrayList<SelectItem>();
List<Raca> racas = racarep.racasDe(gado.getTipogado());
for (Raca r : racas) {
SelectItem item = new SelectItem();
item.setLabel(r.getNome());
item.setValue(r);
listRaca.add(item);
}
}
public Gado getGado() {
return gado;
}
public void setGado(Gado gado) {
this.gado = gado;
if (this.gado != null) {
this.tag = this.gado.getTag();
}
}
public List<SelectItem> getListTags() {
return listTags;
}
public void setListTags(List<SelectItem> listTags) {
this.listTags = listTags;
}
public List<SelectItem> getListTipo() {
return listTipo;
}
public void setListTipo(List<SelectItem> listTipo) {
this.listTipo = listTipo;
}
public List<SelectItem> getListRaca() {
return listRaca;
}
public void setListRaca(List<SelectItem> listRaca) {
this.listRaca = listRaca;
}
public Tag getTag() {
return tag;
}
public void setTag(Tag tag) {
this.tag = tag;
}
public Usuario getUsuario() {
return usuario;
}
public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}
public List<SelectItem> getListUsuario() {
return listUsuario;
}
public void setListUsuario(List<SelectItem> listUsuario) {
this.listUsuario = listUsuario;
}
public TipoGado getTipogado() {
return tipogado;
}
public void setTipogado(TipoGado tipogado) {
this.tipogado = tipogado;
}
public Raca getRaca() {
return raca;
}
public void setRaca(Raca raca) {
this.raca = raca;
}
}
Cadastrogadoservice.java
public class CadastroGadoService implements Serializable{
private static final long serialVersionUID = 1L;
@Inject
private GadosRep gados;
public Gado salvar(Gado gado){
return gados.guardar(gado);
}
@Transactional
public void excluir(Gado gado) throws NegocioException {
gado = this.gados.porId(gado.getGadoId());
this.gados.remover(gado);
}
}
Gadosrep.java
public class GadosRep implements Serializable {
private static final long serialVersionUID = 1L;
@Inject
private EntityManager manager;
public Gado guardar(Gado gado) {
EntityTransaction trx = manager.getTransaction();
trx.begin();
gado = manager.merge(gado);
trx.commit();
return gado;
}
@SuppressWarnings("unchecked")
public List<Gado> filtrados(GadoFilter filtro) {
Session session = manager.unwrap(Session.class);
Criteria criteria = session.createCriteria(Gado.class);
if (filtro.getGadoId() != null) {
criteria.add(Restrictions.eq("gadoId", filtro.getGadoId()));
}
if (filtro.getGadostatus() != "Ativo")
{
criteria.add(Restrictions.eq("gadoStatus", filtro.getGadostatus()));
}
return criteria.addOrder(Order.asc("tipogado")).list();
}
public Gado porId(Long id) {
return manager.find(Gado.class, id);
}
public void remover(Gado gado) {
this.manager.remove(gado);
EntityTransaction trx = manager.getTransaction();
trx.begin();
manager.flush();
trx.commit();
}
}
Convertergadotipo.java
@FacesConverter(forClass = TipoGado.class)
public class ConverterGadoTipo implements Converter {
private TipoGadoRep tipogadosrep;
public ConverterGadoTipo() {
tipogadosrep = CDIServiceLocator.getBean(TipoGadoRep.class);
}
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
TipoGado retorno = null;
if (value != null) {
String nomeTipo = new String(value);
retorno = tipogadosrep.porNome(nomeTipo);
}
return retorno;
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
if (value == null || value.equals("")) {
return "";
} else {
String nomeTipo = ((TipoGado)value).getNomeTipo();
return String.valueOf(nomeTipo);
}
}
}
Convertertiporaca.java
@FacesConverter(forClass = Raca.class)
public class ConverterTipoRaca implements Converter {
@Inject
private RacaRep raca;
public ConverterTipoRaca() {
raca = CDIServiceLocator.getBean(RacaRep.class);
}
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
Raca retorno = null;
if (value != null){
String nome = new String(value);
retorno = raca.porNomeRaca(nome);
}
return retorno;
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
if (value != null){
return ((Raca) value).getNome().toString();
}
return null;
}
}
I believe it is an easy mistake to solve, but I am not used to working with this amount of code and this leaves me with difficulties to identify where the error is.
I appreciate any suggestion or tip.
Where are the queries to record in the bank?
– viana
You’re talking about the Save Method that’s in Gadosrep?
– postgisBeginner