2013-12-03 2 views
1

У меня есть форма-основа объект:Как связать набор значений перечисления в форме: select multiple = "true" весной?

public class MyDto { 
    private Set<MyEnum> myEnum = new HashSet<MyEnum>(); 
    // getters/setters 

    public MyEnym[] getMyEnumValues() { 
    return MyEnum.values(); 
    } 
} 
public MyEnum { 
A, B, C 
} 

Каков путь, чтобы показать все значения перечислений в <form:select multiple="true"/> и автоматически достичь отображения выбранных значений myEnum поля в моем объекте форм-бэк?

Update: Часть кода:

<form:select path="myEnum" multiple="true" items="${myDto.myEnumValues}"/> 

При подаче формы, выбранные значения в множественный представлены в запросе HTTP:

myEnum: A 
myEnum: B 


public String saveMyDto(@Valid @ModelAttribute("myDto") MyDto myDto) { 

    log.debug("Enum list: " + myDto.myEnum().toString()); 
    .... 
} 

ответ

1

Основная идея заключается в назначении значения к item атрибут form:select.

I контроллер, который населяют вид с формой добавления

modelMap.addAttribute("possibleValues", MyEnum.values); 

в использовании Jsp:

<form:select multiple="true" items="${possibleValues}" path="myDto.myEnum"/> 

(С другой стороны, я помню, что у меня было посмотрите на реализацию тэга select spring и выясните, что это значение фактического значения является Enum, затем пружина автоматически использует все Enum.values в качестве значения по умолчанию для items (но я не уверен на 100%))

метод контроллера должен выглядеть

@RequestMapping(value="/form", Method=RequestMethod.GET) 
public ModelAndView whatever() { 
    ModelMap modelMap = new ModelMap(); 
    modelMap.addAttribute("possibleValues", MyEnum.values); 
    return new ModelMap("nameOfTheView", modelMap); 
} 

@RequestMapping(value="/whatever", Method=RequestMethod.POST) 
public ModelAndView whatever(MyDto myDto) { 
     Sysout.println(myDto); 
} 
+1

спасибо. Я попробовал, но это не сработало: он отправляет выбранные значения из multi-select, но поле 'myEnum' в объекте обрамления формы пуст. – MyTitle

+0

Пожалуйста, напишите код вашего метода контроллера и точный запрос (параметр и значение), отправленные на сервер в форме submit – Ralph

+1

, пожалуйста, просмотрите обновленный ответ – MyTitle