2017-07-01 11 views
0

私は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; 

コントローラクラス:この関係で2つのクラスがあります

:この場合は、1人は多くのアカウントを持っている

@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コードを貼り付けます:私はウェブサイトを開こうとすると(.... /ペソア/ pessoacorretora/6)

<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> 

を - 6が有効なIDで、これは誤りです。

HTTPステータス500 - java.lang.IllegalStateException:BindingResultもBean名用プレーンなターゲット・オブジェクトのペソア「可能なリクエスト属性 Exception型レポートとして メッセージjava.lang.IllegalStateExceptionどちら:BindingResultものためのプレーンなターゲットオブジェクトのいずれもBean名 'pessoa'が要求属性として使用可能 説明サーバーが内部エラーを検出したため、f ROMはこの要求を満たす。

実際に私はCRUDアクションを実行するときに2つのクラスの関係をどのように扱うべきか分かりません。

答えて

0

問題は、スプリングがcommandName="pessoa"をJSPフォームにバインドできないことです。

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

テストとしてこれを試してください:これを解決する

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

別の方法は、モデルによってそれを追加することですあなたに注釈を属性

はによってペソアreturndの値があることがわからはありますコントローラ:

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

これはCtrl + c Ctrl + Vの問題です。私はcommandNameを変更しました。ありがとう! –

関連する問題