Gostaria de saber se existe alguma forma de o STRUTS popular um objeto através dos dados que envio pelo form.
Sei que isso é possível porque faço isso com um objeto, porém quando o objeto possui relacionamentos não sei qual seria
a sintaxe das tags do STRUTS nem da Action.
Exemplo que funciona normalmente:
grava-funcao.jsp
<form action="adicionaFuncao" method="post" class="niceform">
<fieldset><legend>Dados da função</legend>
<wk:campoTexto id="[b]funcao.funcao[/b]"
label="Nome da Função:"
type="text" size="50" limit="50"/>
<s:fielderror fieldName="funcao.funcao"/>
</fieldset>
<fieldset>
<wk:botao id="enviar" value="Enviar"
onClick="submit()"/>
</fieldset>
</form>
adicionaFuncaoAction.java
public class AdicionaFuncaoAction extends ActionSupport{
private Funcao funcao;
@Override
@Action(value = "adicionaFuncao",
results = {
@Result(name="success", type="redirect", location = "grava-funcao"),
@Result(name="input", location="grava-funcao.jsp")
},
interceptorRefs={
@InterceptorRef("seguranca")
})
public String execute() throws Exception {
// Variáveis que armazenarão os valores do formulário
Connection conn = GerenteConexao.criaConexao();
// Chama o método DAO que faz a inserção no banco de dados
new FuncaoDAO(conn).grava(getFuncao());
conn.close();
return SUCCESS;
}
public Funcao getFuncao() {
return funcao;
}
public void setFuncao(Funcao funcao) {
this.funcao = funcao;
}
}
Exemplo que não sei como fazer funcionar:
Usuario.java (Modelo)
public class Usuario {
private int id;
private String cpf, nomeCompleto, usuario, senha;
private Funcao funcao; // <---- Campo que quero guardar a ID para inserir no banco
private List<Proposta> propostas;
// getters and setters
grava-usuario.jsp
<table class="nada">
<s:textfield label="CPF" name="usuario.cpf"
id="usuario.cpf"/>
<s:fielderror fieldName="usuario.cpf"/>
<s:textfield label="Nome Completo"
name="usuario.nomeCompleto"
id="usuario.nomeCompleto"/>
<s:fielderror fieldName="usuario.nomeCompleto"/>
<s:textfield label="Usuário" name="usuario.usuario"
id="usuario.usuario"/>
<s:fielderror fieldName="usuario.usuario"/>
<s:password label="Senha" name="usuario.senha"
id="usuario.senha"/>
<s:fielderror fieldName="usuario.senha"/>
<s:select label="Função" name="[b]usuario.funcao.id[/b]" // <---- Não sei como deve nomear este campo para que o STRUTS detecte automaticamente
headerValue="Selecione a função"
headerKey="1" list="funcoes.{funcao}"
value="funcoes.{id}"/>
</table>
AdicionaUsuarioAction.java
public class AdicionaUsuarioAction extends ActionSupport{
private Usuario usuario;
@Override
@Action(value = "adicionaUsuario", results = {
@Result(type = "redirectAction", name = "success",
params = {"actionName", "listaFuncao"}),
@Result(name="input", location="grava-funcao.jsp")
})
public String execute() throws Exception {
// Variáveis que armazenarão os valores do formulário
Connection conn = GerenteConexao.criaConexao();
// Chama o método DAO que faz a inserção no banco de dados
new UsuarioDAO(conn).grava(usuario); // <------- Não grava porque o ID do objeto do tipo Funcao não existe
conn.close();
return SUCCESS;
}
public Usuario getUsuario() {
return usuario;
}
public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}
}