gpt4 book ai didi

java - 使用 Spring MVC 和 Hibernate 将 JSP 中的对象作为外键发送

转载 作者:行者123 更新时间:2023-12-02 12:42:45 24 4
gpt4 key购买 nike

我想创建一个与 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);
}

总结一下,我有一个用于记录银行帐户的特定页面。所以,我创建了这个表单:

<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 保存为外键,该字段为空。我想知道如何在 JSP 表单中传递整个对象。发布方法是:

@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 之前,请确保从数据库获取 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 - 使用 Spring MVC 和 Hibernate 将 JSP 中的对象作为外键发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44866319/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com