Saving whole object instead of name only

Asked

Viewed 72 times

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?

  • You’re talking about the Save Method that’s in Gadosrep?

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.