簡體   English   中英

使用Spring MVC和Hibernate將JSP中的對象作為外鍵發送

[英]Send object in JSP as foreign key using Spring MVC and Hibernate

我想創建一個與OneToMany關系中特定人員相關的銀行帳戶注冊。

我有佩索阿(人):

@Entity
public class Pessoa {
    @Id @GeneratedValue(strategy=GenerationType.IDENTITY)
    private int idPessoa;
    private String nome;
    @OneToMany(mappedBy = "pessoa", targetEntity = ContaCorretora.class, fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    private List<ContaCorretora> 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;

我在Controller中使用此方法開始注冊過程:

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

Sumarizining,我有一個用於記錄銀行帳戶的特定頁面。 因此,我創建了此表單:

<form:form action="${s:mvcUrl('CC#gravar').build() }" method="post" commandName="contaCorretora" 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>  
    <form:hidden path="pessoa" cssClass="form-control" value="${pessoa}"/> 

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

當我以這種方式使用表單時,收到錯誤消息“描述:客戶端發送的請求在語法上不正確。” 我發現問題出在這一行中,因為當我刪除時,表單發布正常:

<form:hidden path="pessoa" cssClass="form-control" value="${pessoa}"/> 

但是,如果刪除此行,則程序不會將idPessoa保存為外鍵,則此字段為null。 我想知道如何以我的JSP形式傳遞整個對象。 post方法是:

@RequestMapping(method=RequestMethod.POST) 
public ModelAndView gravar(ContaCorretora contaCorretora)   {       
    contaCorretoraDao.gravar(contaCorretora);
    return new ModelAndView("pessoa/listageral"); 
}   

DAO的所有方法都可以。

您只需要將pessoa的主鍵發送到表單。 更改表單屬性

<form:hidden path="pessoa.idPessoa" cssClass="form-control" value="${model.pessoa.idPessoa}"/>

持久ContaCorretora之前,請確保從db獲取Pessoa對象。

@RequestMapping(method=RequestMethod.POST) 
public ModelAndView gravar(ContaCorretora contaCorretora)   { 

    contaCorretora.setPessoa(pessoaDao.find(contaCorretora.getPessoa().getIdPessoa()));
    //I escaped  null check and not found exceptions, you should apply some logic to take care of that
    contaCorretoraDao.gravar(contaCorretora);
    return new ModelAndView("pessoa/listageral"); 
}

使用實體作為表單模型不是一個好方法。 持久層不應位於MVC層上。

為了從您的控制器傳遞Java對象

@RequestMapping(method=RequestMethod.POST) 
public ModelAndView gravar(ContaCorretora contaCorretora)   {       
    ModelAndView mav = new ModelAndView("pessoa/listageral");
    // retrieve object from DAO
    Object myObj = Dao.find(id);
    // Put object into model map
    mav.addObject("myObj", myObj);
    // return model and view
    return mav;
}   

在JSP中,您可以使用ExpressionLanguage語法引用對象

  ${myObj}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM