How to get the selected value of combo in Spring MVC 3? - spring

I am using the Spring MVC <form:select> tag in my JSP and have populated the values in it.
How can I retrieve the selected value from the select box and use it for further operations?

You can obtain them in the controller to which you submit. For example:
#RequestMapping("/submit")
public String handle(#RequestParam Foo selectedFoo) {
}
This assumes you have a converter from String to Foo. Otherwise you can simply use String as argument.
If you want to get the whole form submitted to a javabean, make a bean with fields named exactly the same as the fields in your html form, and pass it as argument to the handling method.

I think this tutorial will help you:
http://www.mkyong.com/spring-mvc/spring-mvc-dropdown-box-example/
Spring MVC 3 example:
http://www.roseindia.net/tutorial/spring/spring3/web/spring-3-mvc-form-example.html
Just combine the logic from these 2 examples and you will understand hoe to do it right.

Related

Apply Spring formatter to non-form text in JSP

In Spring MVC 3, I have a customer Formatter that converts my entity objects to text and parses the text for my entity objects. It's registered with the conversionService bean. This link shows how it works: http://springinpractice.com/2012/01/07/making-formselect-work-nicely-using-spring-3-formatters/
I'm wondering if there's any way to apply the formatter to text not inside of forms. Specifically, I'd like my object displays to have a web link to their foreign key entities with the same text that's used in the forms. I've gotten the forms to display successfully, but I haven't been able to apply it to the text on the JSP page. Instead, it uses toString.
I've played around with <spring:bind>, <spring:message>, and <spring:eval>, but they don't seem to apply to the formatter. <spring:eval> attempts to use the DateTimeFormatter.
Hopefully, this helps someone else looking for this. It turns out it was <spring:eval>, which makes sense, since somehow it has to be linked to Spring. The issue was syntactical. The statement below causes the entity to be processed by a Spring converter.
<spring:eval expression="myEntityObject" htmlEscape="false"/>
No JSP tags are needed, like: ${ok}
This uses the Spring expression language.

SpringMVC Command Object

I have a small doubt with SpringMVC's command object. So the problem is, I have couple of forms which I am going to use in multiple pages (Around 17). I decided to make these two forms as JSP's and include them in the parent JSP's. The problem I am facing is that the textfields and dropdown's aren't populating with the data which is passed on from the server using Command object.
Lets call the Parent JSP as parent.jsp and than two included JPS's(which have the forms) as child1.jsp and child2.jsp. The controller for parent.jsp sets a ModelAttribute with name previousSales and returns the view as abc/parent where abc is the folder. (WEB-INF/jsp/abc/parent). My question is how do I make the model attribute available to the included JSP's?
The Command object should be part of your handler method calls, as follows:
#RequestMapping("/somepath/foo/do")
public String someHandlerMethod(
#ModelAttribute("commandObject") CommandObject commandObject,
Model model,
BindingResult result) {
...processing...
return("some.jsp");
}
On your JSP, use the Spring Forms TLD for the form fields, and the Command object will be bound to the form fields.
#RequestMapping("/somepath/foo/do")
public String someHandlerMethod(
#ModelAttribute("commandObject") CommandObject commandObject,
Model model,
BindingResult result) {
...processing...
return("some.jsp");
}

How can I bind fieldName_1, fieldName_2 to a list in spring mvc

I'm trying to convert a struts 1 application to Spring MVC 3.0. We have an form with quite a few parameters, most of which where automatically binded in struts. However there where a number of fields in the format fieldName_# where # is a number that we manually bound by looping through the request.
I'm looking for a tidier way to do this in Spring mvc, but don't know where to start.
Ideally we should have them as fieldName[#] and it would be easier, but we cannot change this and have to keep the fieldName_# format. Also the number of these fields that are sent in the request are unknown.
One way to achieve this is by wrapping the servletRequest and implementing the getParameter (and associated methods) such a way that parameters with name fieldName_# are returned as fieldName[#]. A servletFilter would be one option to wrap the request.

Is it possible to set a domain object as a hidden field in spring forum bean?

greetings all
i have a domain class named car
and i have an object from car retrieved from the DB
and i want to save this object in the form as a hidden field
in order when submitting to get this object
but when i tried
<form:hidden path=carObj />
it didn't work, any ideas why, and how to do such behaviour ?
Well carObj is a java object, and an HTML hidden field can only hold text, so how would Spring store one inside the other? If you want to use hidden fields, you're going to have to break down the object into individual fields.
It sounds like what you need is to tell Spring to store carObj in the session, so that's visible when the form is posted. You can use the #SessionAttributes annotation for this (see docs).
Spring's form tag library does indeed support hidden fields as you described.
See the Spring Reference for more information.

Spring webflow validation

complete and utter newbie on spring webflow (and indeed, spring mvc).
30 minutes in... got the first page of my flow appearing, which happens to be a captcha, an input field and a submit button.
The actual captcha value is stored in session and i need to validate that the input field values matches the value in session.
In order to do validation, my model is passed a 'ValidationContext'.
Question: i can't seem to access session data from the ValidationContext. How do i do this?
Thanks!
try MessageContext in place of validationContext
In spring webflow we have a model class and a model validator class. Make sure you have created a validator method in the validator class and it must have same name as the method you are trying to validate (The method where you have those input fields). This should give you a guideline on getting started.

Resources