Estou com um problema quando utilizo o enum e o struts!
Tenho um enum do tipo sexo (masculino e feminino).
public enum Sexo {
/**
*
*/
MASCULINO(1), /**
*
*/
FEMININO(2);
}
e na jsp tenho um um radio onde seleciona masculino e feminino.
<s:radio name="bean.sexo" list="%{#{1:'Masculino',2:'Feminino'}}" />
Entretanto o valor nunca é repassado para a action ou informado na página!
alguem sabe como sair desse problema ?
Amigo,
Se for possivel, manda o codigo da tua Action e do teu “bean” se possivel.
Assim, nos ajuda a te ajudar 
o Bean
public class Pessoa {
private int idPessoa;
private String nome;
private Sexo sexo;
}
O enum
public enum Sexo {
/**
*
*/
MASCULINO(1), /**
*
*/
FEMININO(2);
}
A action
public class PessoaAction extends ActionSupport {
public String execute() {
return "paginacadastro"
}
public String primeiro() {
//pesq BD
return "paginacadastro"
}
public String anterior() {
//pesq BD
return "paginacadastro"
}
public String proximo() {
//pesq BD
return "paginacadastro"
}
public String ultimo() {
//pesq BD
return "paginacadastro"
}
public String save() {
//Save BD
return "paginacadastro"
}
}
Na jsp esta assim!
<s:radio name="pessoa.sexo" list="%{#{1:'Masculino',2:'Feminino'}}" />
toda vez que os valores vem da jsp o struts sempre acusa “Invalid field value for field “pessoa.sexo”.”
O que eu fiz (que ficou meio porco, e não sei pq só funcionou p/ um enum e não para os outros, hauhauahu) foi o seguinte:
Na action de resposta (do form), tem o set, no seu caso o setSexo. O que eu queria (e não funcionou) foi usar o enum como parâmetro:
public void setSexo (Sexo sexo) {
this.sexo = sexo;
}
O que eu tentei fazer foi o seguinte:
public void setSexo (String id) {
this.sexo = Sexo.values()[Integer.parseInt(idSexo)];
}
Já que o jsp estava retornando o id, pelo menos no meu caso (no jsp eu coloquei o id no “listKey”).
O problema: isso funcionou p/ um enum, e não para os outros!!!
Se alguém tiver uma resposta melhor, menos nas coxas, por favor, me avise =P
E espero ter ajudado!
depois do que disse encontrei a solução!
Em todo bean que apresenta o enum eu fiz isso!
public class A {
...
private Myenum myenum;
public Myenum getMyenum(){
return myenum;
}
public setMyenum(Myenum myenum){
this.myenum= myenum;
}
public setMyenum(int myenum){
this.myenum= Myenum.fromInt(myenum);
}
}
public enum Myenum{
VALOR1(1), VALOR2(2);
public static Myenum fromInt(int value){
switch(value)
case 1: return VALOR1;
case 2: return VALOR2;
default: return null;
}
}
pelo menos para mim resolveu!