Robert
Robert

Reputation: 1638

Spring MVC and Request Attributes

I think the original question was confusing.

I have a HashMap that needs to be a Collection from a database that I'd like to send to a view via a Spring Controller. I don't want to put this HashMap in the model.addAttribute() because the Spring Model object returns a Map and my JSP needs the collection to be a Collection<Object>. If I set my HashMap.values() in a request.setAttribute, how do I go about dispatching that request variable to the view if my method is returning a String?

@RequestMapping(method = RequestMethod.GET)
public String home(Locale locale, Model model, HttpServletRequest request) {

    model.addAttribute("surveys", mySurveys); //this is a map and I need a Collection<Object>

    //So I'd like to do this, but how do I get to the "evaluations" object in a view if I'm not dispatching it (like below)??
    request.setAttribute("evaluations", mySurveys);

    //RequestDispatcher rd = request.getRequestDispatcher("pathToResource");
    //rd.forward(request, response);

    return "home";
}

EDIT: The Spring Tag library cannot be used for this particular usecase.

Thanks.

Upvotes: 2

Views: 10652

Answers (2)

Matt
Matt

Reputation: 3525

If mySurveys is a Map, then perhaps you can put mySurveys.values() into the ModelMap instead of mySurveys (Also, are you intending to use a ModelMap instead of a Model?)

In the code below, surveys would be a Collection of Objects and would be accessible in the jsp via ${surveys}

@RequestMapping(method = RequestMethod.GET)
public String home(ModelMap modelMap, HttpServletRequest request) {

    Map<String,Object> mySurveys = getMySurveys();
    modelMap.addAttribute("surveys", mySurveys.values());
    return "home";
}

Upvotes: 4

th3an0maly
th3an0maly

Reputation: 3510

I think you're confused as to what ModelMap is.

You can annotate whatever variable you want to access in the view by @ModelAttribute and Spring will automatically instantiate it, and add it to the ModelMap. In the view, you can use it like:

<form:form modelattribute="myAttribute">
    <form:input path="fieldInAttribute">
</form:form>

Hope this answers your question

Upvotes: 1

Related Questions