Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I access ModelMap in a jsp?

How can an object be accessed from the ModelMap in jsp so that a method can be called on it? Currently I recieve this error:

Syntax error on token "$", delete this token

JSP

<body>
        <% MenuWriter m = ${data.menus} %>
        <%= m.getMenus()%>  
</body>

Java

@Controller
@RequestMapping("/dashboard.htm")
@SessionAttributes("data")
public class DashBoardController {

    @RequestMapping(method = RequestMethod.GET)
    public String getPage(ModelMap model) {
        String[] menus = { "user", "auth", "menu items", };
        String[] files = { "menu", "item", "files", };
        MenuWriter m = new MenuWriter(menus, files);
        model.addAttribute("menus", m);

        String[] atocs = { "array", "of", "String" };
        model.addAttribute("user_atocs", atocs);

        return "dashboard"; 
    }
}
like image 334
James Avatar asked Aug 01 '10 23:08

James


2 Answers

The <% %> syntax is deprecated, and shouldn't be used any more.

The equivalent in modern JSP of your JSP fragment would be:

<body>
   ${menus.menus}
</body>

Obviously, that looks confusing, so you may want to consider renaming parts of your model for clarity.

Also, your annotation

@SessionAttributes("data")

does nothing here, since you have no entry in the ModelMap with the key data. This is only useful if you want to keep the model data across the session, which it doesn't seem you need to here.

like image 192
skaffman Avatar answered Sep 30 '22 11:09

skaffman


${varName} notation can be used in jstl only, and never - in plain java code. $ character has no special meaning in Java.

Try something like pageContext.getAttribute("varName") or session.getAttribute("varName") (don't remember how exactly it's done).

like image 44
Nikita Rybak Avatar answered Sep 30 '22 13:09

Nikita Rybak