如何在EL之外的JSTL中访问模型?

时间:2011-09-25 23:19:41

标签: java spring model-view-controller jsp jstl

在Expression Language中,我可以这样访问我的模型:$ {model.member} 当我想使用<%= some_method($ {model.member})时,如何实现相同的目标; %GT;

原因是因为我创建了一些HTML助手方法来将逻辑与UI分开,我需要传递一个模型成员来创建用户控件。

2 个答案:

答案 0 :(得分:4)

JSP的main方法具有以下签名:

        _jspService(HttpServletRequest request,
                    HttpServletResponse response)
             throws ServletException, java.io.IOException

基于此,您可以从scriptlet以编程方式访问请求和响应对象。例如:

        <%= request.getParameter("foo").toString() %>

        <%= request.getAttribute("bar").toString() %>

如果你想做更复杂的事情,你可以在这些之前用scriptlet来声明/初始化本地(Java)变量; e.g。

        <% String foo = request.getParameter("foo") == null ?
                   "no foo" : request.getParameter("foo").toString(); %>

        <%= foo %>

您可以使用它在请求或响应对象中查找模型(我认为它将是名为“model”的请求的属性),将其强制转换为适当的类型,并调用其getter方法。


  

原因是因为我创建了一些HTML助手方法来将逻辑与UI分开,我需要传递一个模型成员来创建用户控件。

更好的想法是将这些辅助方法转换为自定义JSP标记,以便您可以在不使用scriptlet的情况下使用它们。通常认为具有嵌入式scriptlet的JSP难以阅读且难以维护。一个小错误(或模型API的一个更改)和JSP在您的部署平台上生成了错误的Java,并且您得到了一个损坏的页面。

答案 1 :(得分:0)

看看JSTL自定义函数。它允许您以JSTL标准方式从代码中调用静态函数。你只需要在你的tld文件中设置。