【问题标题】:How do I access ModelMap in a jsp?如何在 jsp 中访问 ModelMap?
【发布时间】:2010-08-01 23:00:48
【问题描述】:

如何从jsp中的ModelMap中访问一个对象,以便在其上调用方法?目前我收到此错误:

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"; 
    }
}

【问题讨论】:

    标签: java jsp spring-mvc jstl


    【解决方案1】:

    &lt;% %&gt; 语法已弃用,不应再使用。

    您的 JSP 片段在现代 JSP 中的等效项是:

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

    显然,这看起来令人困惑,因此为了清晰起见,您可能需要考虑重命名模型的某些部分。

    还有你的注释

    @SessionAttributes("data")
    

    这里什么都不做,因为您在 ModelMap 中没有使用键 data 的条目。这仅在您想在整个会话中保留模型数据时才有用,在这里您似乎不需要这样做。

    【讨论】:

    • 哇,好的,非常感谢,这容易多了。 'data' 会话属性的原因是我认为'data.menus' 可以访问'menus',因为似乎不可能在@SessionAttributes 中创建多个条目,例如'@SessionAttributes("menus","anotherSessionVar")' 或者有多个 '@SessionAttributes' 注释。知道如何做到这一点吗?
    • @James:试试@SessionAttributes({"menus","anotherSessionVar"})
    【解决方案2】:

    ${varName} 表示法只能在 jstl 中使用,而永远不能在纯 java 代码中使用。 $ 字符在 Java 中没有特殊含义。

    试试pageContext.getAttribute("varName")session.getAttribute("varName") 之类的东西(不记得具体是怎么做的了)。

    【讨论】:

    • 您的第一句话具有误导性。你的意思是在这里说 JSP,而不是 JSTL。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多