Como faço para usar um parâmetro de enum em Struts 2?
Pergunta
Eu estou tentando obter uma ação em Struts 2 a trabalhar com um Enum como um parâmetro de entrada. O que eu fiz até agora se parece com:
public TestAction {
public enum Module {
VALUE1;
}
private Module module;
public void setModule(Module module) {
this.module = module;
}
public Module getModule() {
return module;
}
}
Mas ao tentar usar este eu recebo um erro de conversão XWork, e a ação em si nem sequer executar. Eu posso fazer este trabalho como é, ou deveria fornecer setModule (String) me?
Edit: eu estou usando struts 2.1.6 O URL que estou tentando: /test.action?module=value1
Solução
Deve ligar uma string para um enum imediatamente. Eu acho que o conversor de tipo enum tem sido na configuração padrão desde que eu acho 2.1.x.
- Qual versão do Struts 2 você está usando?
Se você não tem certeza do seguinte é na minha xwork-conversion.properties
em um 2.0.14 aplicativo
java.lang.Enum = com.opensymphony.xwork2.util.EnumTypeConverter
Editar : Em resposta ao comentário, se você precisa ignorar caso de atribuição de uma enumeração você tem as seguintes opções:
- Altere o valor de enum para actaully estar em minúsculas - não grande estilo e poderá fazer o seu código parece um pouco estranho
- Escrever um novo conversor caso insensível tipo para java.lang.Enum (basta copiar o XWork e toupper a entrada eu acho)
- adicionar um novo setModule (String) para este caso específico
Outras dicas
Eu apenas encontrar um problema semelhante ao encaminhar a partir de uma ação para uma ação de redirecionamento (em vez de uma ação para a frente), Struts não adequadamente reconhecer Eu estou usando um List<Enum>
parâmetro e eu tive que usar um método de proxy converter de String parâmetro em um List<Enum>
.