Reputation: 709
I use Spring MVC 3.1 in my app. Say I have a methods in controller as follows:
@RequestMapping(value = "/assignUser", method = RequestMethod.GET)
public String assignUserToCompany(ModelMap map){
List<CompanyDetails> companies = //companies list from DAO
List<UserDetails> users = //users list from DAO
map.addAttribute("companiesList",companies);
map.addAttribute("usersList",users);
return "someView";
}
@RequestMapping(value = "/assignUser", method = RequestMethod.POST)
public String assignUserToCompany(@RequestParam("user")UserDetails user,
@RequestParam("company")CompanyDetails company){
if(user!=null && company!=null){
// some operations with entities
}
return "someView";
}
and I have a form on the view side:
<form method="post" action="assignUser.html">
<label for="select-users"><spring:message code="assignUser.label.users"/> </label>
<select id="select-users" name="user">
<c:forEach items="${usersList}" var="user">
<option value="${user}">${user.firstName} ${user.legalName}</option>
</c:forEach>
</select>
<label for="select-companies"><spring:message code="assignUser.label.companies"/> </label>
<select id="select-companies" name="company">
<c:forEach items="${companiesList}" var="company">
<option value="${company}">${company.name}</option>
</c:forEach>
</select>
<input type="submit" value="<spring:message code="assignUser.label.submit"/>"/>
</form>
I want to pass object I select in input as request parameters and perform some operations with them but standart @RequestParam permit me only primitive types and wrappers as we know. Can I customize this in order to pass my objects? Thank you.
Upvotes: 3
Views: 8173
Reputation: 47280
If the pojo relates directly to a form,decalre a spring form in your jsp (assuming yourDTO has a property name...
<form:form id="yourForm" commandName="yourDTO" action="Save" method="POST">
<form:input path="name" maxlength="90" cssStyle="width: 650px;" id="name"/>
and your controller :
@RequestMapping(value = "/Save", method = RequestMethod.POST)
public ModelAndView save(final yourDTO yourDTO) {
Or if converting one field to a complex class you will have to provide a conversion service :
@Component
public class FooConverter implements Converter<String, Foo> {
@Override public Foo convert(String source) {
//do covnersion from string to Foo
Foo foo = new Foo(source)
return Foo;
}
}
and register it
<bean id="conversionService"
class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<set>
<bean class="com.yourcompany.controller.converters.FooConverter"/>
</set>
</property>
</bean>
Upvotes: 4