Spring + hibernate + jsp

0

When submitting my form, an error occurs due to this section:

<select name="departamento" style=" width : 354px;">  
  <c:forEach var="departamento" items="${allDepts}">  
    <option value="${departamento.selfId}" 
         ${especialidade.departamento==departamento.selfId ?'selected' :''}> 
         ${departamento.designacao}                                 
    </option>  
  </c:forEach>  
</select>
  

Field error in object 'specialidadeVO' on field 'department':   rejected value [0]; ... not matching editors or conversion strategy   found].

I stress that in my class Special Model I have the DepartmentVo as a non-primitive attribute, that is, DepartmentVo is a class.

Special Class V:

package iim.sigra.model.especialidade;

import java.io.Serializable;

import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import org.hibernate.annotations.GenericGenerator;

import iim.sigra.model.departamento.DepartamentoVO;

@Entity
@Table(name = "ESPECIALIDADE")
public class EspecialidadeVO implements Serializable {


    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(generator="increment")
    @GenericGenerator(name="increment", strategy = "increment")
    protected long selfId;

    protected String designacao;
    protected String descricao;
    protected int duracaoNumSemestres;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name="id_departamento")
    protected DepartamentoVO departamento;


    public long getSelfId() {
        return selfId;
    }

    public void setSelfId(long selfId) {
        this.selfId = selfId;
    }


    public String getDesignacao() {
        return designacao;
    }

    public void setDesignacao(String designacao) {
        this.designacao = designacao;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public int getDuracaoNumSemestres() {
        return duracaoNumSemestres;
    }

    public void setDuracaoNumSemestres(int duracaoNumSemestres) {
        this.duracaoNumSemestres = duracaoNumSemestres;
    }

    public DepartamentoVO getDepartamento() {
        return departamento;
    }

    public void setDepartamento(DepartamentoVO departamento) {
        this.departamento = departamento;
    }
}

DepartmentVoice class:

package iim.sigra.model.departamento;

import java.io.Serializable;
import java.util.Collection;

import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import org.hibernate.annotations.GenericGenerator;

import iim.sigra.model.especialidade.EspecialidadeVO;

@Entity
@Table(name = "DEPARTAMENTO")
public class DepartamentoVO implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(generator="increment")
    @GenericGenerator(name="increment", strategy = "increment")
    protected long selfId;

    protected String designacao;
    protected String descricao;

    @OneToMany(mappedBy="departamento", fetch = FetchType.LAZY)
    protected Collection<EspecialidadeVO> especialidades;


    public long getSelfId() {
        return selfId;
    }

    public void setSelfId(long selfId) {
        this.selfId = selfId;
    }

    public String getDesignacao() {
        return designacao;
    }

    public void setDesignacao(String designacao) {
        this.designacao = designacao;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

}

Controller SpecialtyAction:

package iim.sigra.controller.especialidade;

import java.util.ArrayList;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import iim.sigra.model.departamento.DepartamentoDAO;
import iim.sigra.model.departamento.DepartamentoVO;
import iim.sigra.model.especialidade.EspecialidadeDAO;
import iim.sigra.model.especialidade.EspecialidadeVO;
import iim.sigra.model.pessoa.usuario.UsuarioVO;
import iim.sigra.utilitarios.Mensagens;

@Controller
@RequestMapping("/especialidade")
public class EspecialidadeAction {

    ArrayList<EspecialidadeVO> allEspecialidades = new ArrayList<EspecialidadeVO>();


    @RequestMapping(method=RequestMethod.GET)
    public ModelAndView step0(){

        ModelAndView modelView = new ModelAndView("/especialidade/especialidade-form");

        ArrayList<DepartamentoVO> allDepts = new ArrayList<DepartamentoVO>();
        allDepts.add(0, new DepartamentoVO());
        DepartamentoDAO deptDao = new DepartamentoDAO();
        allDepts.addAll(deptDao.getAll());

        modelView.addObject("allDepts", allDepts);


        EspecialidadeDAO espcDao = new EspecialidadeDAO();
        this.allEspecialidades=espcDao.getAll();

        modelView.addObject("allEspecialidades", this.allEspecialidades);


        return modelView;
    }

    @RequestMapping(value="/save", method= {RequestMethod.POST})
    public ModelAndView save (EspecialidadeVO especialidade, UsuarioVO user, Model model) throws Exception{

        System.out.println("Salvando.......!");

        EspecialidadeDAO espDao = new EspecialidadeDAO();
        espDao.save(especialidade,user);

        model.addAttribute("statusMsg", Mensagens.OPERATION_SUCCESS_MSG);

        return new ModelAndView("/especialidade/especialidade-form", "allEspecialidades", this.allEspecialidades) ;
    }

}
    
asked by anonymous 25.01.2018 / 15:15

1 answer

0
Another very simple alternative that served to bridge this bug was to create in the class to which the items in the combobox belong, in my case DepartamentoVo, a constructor that receives a String as a parameter and converts it to type the corresponding one to the type to which attribute belongs that binds this class with another class (SpecialValue):

public DepartamentoVO(String str){
 this.selfId= Long.parseLong(str);
}
    
30.01.2018 / 18:51