Passando objeto em form JSP (Spring MVC + Hibernate)

Boa noite,

Comecei recentemente a programar utilizando o framework Spring MVC e acabei emperrando em um cadastro que envolve relacionamento OneToMany. Neste caso, eu fiz um cadastro de pessoas que funcionou tudo ok. Agora eu quero fazer uma outra tela, aonde outra pessoa irá cadastrar todas as contas bancárias desta pessoa. As classe são as seguintes:

Classe Pessoa

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

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

Estou usando este método no controller para começar o processo de registrar as contas bancárias para o cliente:

@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);        
}

Então eu criei um formulário que eu vou cadastrar a conta específica para a Pessoa que foi recuperada através do ID:

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

Quando eu faço desta forma, recebo o erro “description The request sent by the client was syntactically incorrect.”. Descobri que esta linha abaixo do meu formulário que está causando erro, pois deletei ela e o registro foi gravado normalmente, porém o idPessoa (a chave estrangeira) no banco ficou nulo. Segue a linha que está errada:

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

Bom, descobri que a linha está errada, mas não sei como deixar certa. Como eu faria no caso para gravar o OBJETO pessoa ou ao menos dar alguma referência no ID que eu estou puxando para que ele seja gravado no campo como chave estrangeira?

Apenas como desencargo, este é o metodo post que eu estou chamando (funciona normal se eu deletar essa linha que eu mencionei:

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

murilogoes,segue as minhas considerações:

@RequestMapping(value = “pessoacorretora/{id}”)
public ModelAndView pessoaCorretora(@PathVariable int id, ContaCorretora contaCorretora ) // Basta somente deixar o nome da variável igual ao do parametro definido na url, que no seu caso é “id”.

Em sua jsp tente dessa maneira:

<\c:if test = “${model.key eq ‘Pessoa’}>
<\c:forEach items=”${pessoa}" var=“model”>
<\form:hidden path=“pessoa” cssClass=“form-control” value="${pessoa.id}"/>
</c:foreach>
</c:if>