Depois de perder 1 dia inteiro pesquisando e de inúmeras tentativas falhas de como usar o model binding do struts2 com enumerations do Java5, eu finalmente encontrei a solução em um site Japonês. Sim, Japonês. Não entendi nada do que estavam falando, mas consegui entender parte do código, o que foi suficiente.
Resolvi registrar para ajudar quem estiver passando pelo mesmo problema. Infelizmente não tenho o link da onde tirei a solução, se eu achar novamente, eu coloca aqui a fonte.
Usando a seguinte enum e entidade:
public enum Sexo {
Masculino, Feminino
}
public class Cliente {
private Sexo sexo;
public void setSexo(Sexo sexo) {
this.sexo = sexo;
}
public void setSexo(String sexo) {
this.sexo = Sexo.valueOf(sexo);
}
public Sexo getSexo() {
return this.sexo;
}
}
A view ficaria assim:
<select name="cliente.sexo">
<option <s:if test="%{cliente.sexo == @com.pacote.Sexo@Masculino}">selected="selected"</s:if> value="Masculino">Masculino</option>
<option <s:if test="%{cliente.sexo == @com.pacote.Sexo@Feminino}">selected="selected"</s:if> value="Feminino">Feminino</option>
</select>
Neste caso, estou considerando que a action tenha uma propriedade do tipo Cliente com nome cliente.
Eu havia tentado de tudo ali nos atributos values da tag option, principalmente 0 e 1 por estar acostumado com o ASP.NET MVC. Mas acabei descobrindo que nas values o correto é ir o nome dos valores da enumeração e a entidade precisa ter um método set que receba uma string. Veja na classe Cliente o método setSexo(String), dentro dele, apenas converto para a enumeração.
Até a próxima!