服务器遇到内部错误,导致无法完成此请求

时间:2017-07-01 02:07:01

标签: java spring hibernate jsp jpa

我正在使用Spring MVC进行应用程序,当我尝试将银行帐户注册到我的应用程序中的特定人员时,我遇到了问题。在这种情况下,一个人有很多帐户:

这种关系中有两个类:

Sumarizing:

@Entity
public class Pessoa {
    @Id @GeneratedValue(strategy=GenerationType.IDENTITY)
    private int idPessoa;

    @OneToMany(mappedBy = "pessoa", targetEntity = ContaCorretora.class, fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    private List<ContaCorretora> contaCorretora;


@Entity
public class ContaCorretora {
    @Id @GeneratedValue(strategy=GenerationType.IDENTITY)
    private int idConta;
    private TipoConta tipoConta;
    private TipoRisco tipoRisco;
    private String login;
    private String senha;
    private BigDecimal valorAtual;
     @ManyToOne
     @JoinColumn(name="idPessoa")
     private Pessoa pessoa;

控制器类:

@RequestMapping("/pessoa")
@Controller
public class ContaCorretoraController {


    @Autowired
    private ContaCorretoraDAO contaCorretoraDao;

    @Autowired
    private PessoaDAO pessoaDao;

    @RequestMapping("/pessoacorretora/{id}") 
    public ModelAndView pessoaCorretora(@PathVariable("id") int id, ContaCorretora contaCorretora ) {
        contaCorretora = new ContaCorretora();
        Map<String, Object> model = new HashMap<String, Object>();
        Pessoa pessoa = pessoaDao.find(id);
        model.put("contaCorretora", contaCorretora);
        model.put("pessoa", pessoa);
        model.put("tipoConta", TipoConta.values());
        model.put("tipoRisco", TipoRisco.values());
        return new ModelAndView("pessoa/contacorretora", "model", model);       
    }


    @RequestMapping(value="/pessoacorretora/finalizar", method=RequestMethod.POST) 
    public ModelAndView gravar(ContaCorretora contaCorretora)   {       
        contaCorretoraDao.gravar(contaCorretora);
        return new ModelAndView("redirect:pessoa/contacorretora"); 
    }

我真的不知道控制器类是否正确,但可能存在问题。不过,我也会粘贴JSP代码:

<form:form action="${s:mvcUrl('CCC#gravar').build() }" method="post" commandName="pessoa" enctype="multipart/form-data" >


    <div class="form-group" >
        <label>Conta</label>
        <select name="tipoConta">
            <c:forEach items="${model.tipoConta}" var="tipoConta">
                  <option value=${tipoConta}>${tipoConta}</option>
            </c:forEach>
        </select>
    </div>

    <div class="form-group" >
        <label>Risco</label>
        <select name="tipoRisco">
            <c:forEach items="${model.tipoRisco}" var="tipoRisco">
                  <option value=${tipoRisco}>${tipoRisco}</option>
            </c:forEach>
        </select>
    </div>

            <div class="form-group">
        <label>Login</label>
        <form:input path="login" cssClass="form-control" /> 

    </div>

    <div class="form-group">
        <label>Senha</label>
        <form:input path="senha" cssClass="form-control" /> 

    </div>

    <div class="form-group">
        <label>Valor Atual</label>
        <form:input path="valorAtual" cssClass="form-control" /> 

    </div>  



        <button type="submit" class="btn btn-primary">Cadastrar</button>
</form:form>

当我尝试打开网站时(.... / pessoa / pessoacorretora / 6) - 6是有效的ID,这是错误:

HTTP状态500 - java.lang.IllegalStateException:既不是BindingResult也不是bean名称的普通目标对象&#39; pessoa&#39;可用作请求属性 类型异常报告 message java.lang.IllegalStateException:BindingResult和bean名称的普通目标对象&#39; pessoa&#39;可用作请求属性 description服务器遇到内部错误,导致无法完成此请求。

实际上,当我想做CRUD动作时,我真的不知道如何处理两个类的关系。

1 个答案:

答案 0 :(得分:1)

问题是spring无法绑定JSP表单中的commandName="pessoa"

你确定佩索阿的价值是:

    Pessoa pessoa = pessoaDao.find(id); // is not Null ??

尝试这个测试:

    model.put("pessoa", pessoa == null ? new Pessoa() : pessoa );

解决此问题的另一种方法是通过控制器上的模型属性注释添加它:

@ModelAttribute("pessoa ")
public Pessoa defaultInstance() {
    return new Pessoa();
}