Как мне использовать параметр enum в struts 2?
Вопрос
Я пытаюсь заставить действие в Struts 2 работать с перечислением в качестве входного параметра.То, что я сделал до сих пор, выглядит так:
public TestAction {
public enum Module {
VALUE1;
}
private Module module;
public void setModule(Module module) {
this.module = module;
}
public Module getModule() {
return module;
}
}
Но при попытке использовать это я получаю ошибку преобразования xwork, а само действие даже не выполняется.Могу ли я заставить это работать как есть, или я должен сам предоставить setModule (строку)?
Редактировать:Я использую struts 2.1.6 URL-адрес, который я пытаюсь:/test.action?модуль=значение1
Решение
Он должен сразу привязать строку к перечислению.Я думаю, что конвертер типов enum был в конфигурации по умолчанию, так как, я думаю, 2.1.x.
- Какую версию struts 2 вы используете?
если вы не уверены, то в моем xwork-conversion.properties
в приложении 2.0.14
java.lang.Enum = com.opensymphony.xwork2.util.EnumTypeConverter
Редактировать:В ответ на комментарий, если вам нужно игнорировать регистр для назначения перечисления, у вас есть следующие варианты:
- Измените значение enum на actaully в нижнем регистре - не лучший стиль и может сделать ваш код немного странным
- Напишите новый конвертер типов без учета регистра для java.lang.Перечислите (просто скопируйте xwork и, я думаю, измените входные данные)
- добавьте новый setModule(строку) для этого конкретного случая
Другие советы
Я просто столкнулся с подобной проблемой при перенаправлении из действия в действие перенаправления (вместо действия переадресации), Struts не будет правильно распознавать, что я использую параметр List<Enum>
, и мне пришлось использовать прокси-метод для преобразования из параметр String в <=>.