我想在OneToMany关系中创建与特定Person相关的银行账户注册表。使用Spring MVC和Hibernate作为外键在JSP中发送对象
我有CLAS昂佩索阿(人):
@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;
我使用的控制器此方法用于启动注册过程:
@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保存为一个外键,这字段为空。我想知道如何在JSP表单中传递整个对象。后置方法是:
@RequestMapping(method=RequestMethod.POST)
public ModelAndView gravar(ContaCorretora contaCorretora) {
contaCorretoraDao.gravar(contaCorretora);
return new ModelAndView("pessoa/listageral");
}
所有的DAO的方法都没问题。
对不起,我不明白你的好答案提出异议。我在我的方法POST请求中使用了这些命令,但表单继续发生错误。 –
@MuriloGóesdeAlmeida对不起,我添加了隐藏属性作为纯文本,所以它真的隐藏在我的答案中,我再次添加它请阅读我的编辑 –
现在我理解你的观点。我确切地使用了你的展示方式和它的作品!我只需要将value =“$ {pessoa.idPessoa}更改为value =”$ {model.pessoa.idPessoa} –