【问题标题】:How to invoke a java method from jsp?如何从jsp调用java方法?
【发布时间】:2014-03-08 21:15:15
【问题描述】:

在我的 jsp 中,我有以下内容:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<c:set scope="request" var="test" value="${com.xxx.foo.Bar.getBar()}" />

但这似乎将test 存储为具有${com.xxx.foo.Bar.getBar()} 文字值的字符串,而不是该方法的返回值(这是一个枚举)。

这里getBar()是实例方法,不是静态方法。

我做错了什么?

【问题讨论】:

  • JSP EL 应该访问存储在页面、请求、会话或应用程序属性中的 Java bean 的属性。不要调用任意类的静态方法。控制器应该将测试存储在请求属性中,而不是 JSP 中。
  • 不,你不能那样做。在 Servlet 中编写代码,在 JSP 中访问属性。并且永远不要使用 Scriptlets。
  • 如果是实例方法,这段代码就更没有意义了。即使在 Java 中,它也没有任何意义。问题恰恰在于您没有控制器。你应该。 JSP 应该用作生成 HTML 的视图组件,仅此而已。
  • 是的,这就是你应该做的。当然,它可以在 Tomcat 上运行。 Tomcat 实现了 servlet 和 JSP 规范。从 servlet 3.0/Tomcat 7 开始,可以使用 @WebServlet 注释声明和映射 Servlet。您甚至不再需要 web.xml 文件。我会从这个开始,一旦你有了这个想法,就投资学习一个真正的 MVC 框架,比如 Spring MVC,它提供了更多的特性(来自表单的 bean 填充、验证、国际化、自定义标签等)
  • 是的。请求属性可以从处理请求所涉及的所有组件访问。属性用于将请求范围内的状态从组件传播到组件。

标签: java jsp el


【解决方案1】:

根据 cmets 中其他人的建议,我通过创建一个 servlet 并将信息传递给 jsp 来解决这个问题,如下所示:

public class FooServlet extends HttpServlet
{
    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws IOException, ServletException
    {
        Bar bar = new Bar();
        request.setAttribute("bar", bar.getFooBar() );
        request.getRequestDispatcher("/myPage.jsp").forward(request, response);
    }
}

在jsp中:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多