在Expression Language中,我可以这样访问我的模型:$ {model.member} 当我想使用<%= some_method($ {model.member})时,如何实现相同的目标; %GT;
原因是因为我创建了一些HTML助手方法来将逻辑与UI分开,我需要传递一个模型成员来创建用户控件。
答案 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文件中设置。