【发布时间】: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 填充、验证、国际化、自定义标签等) -
是的。请求属性可以从处理请求所涉及的所有组件访问。属性用于将请求范围内的状态从组件传播到组件。