【发布时间】:2010-02-25 22:32:00
【问题描述】:
velocity 和 freemarker 看起来相当相似,至少对于基本用法而言。
无论如何,“内置”或标准视图框架叫什么? 它看起来像:
<c:if test="${someobject.property != null}">
【问题讨论】:
标签: java jsp templates jstl el
velocity 和 freemarker 看起来相当相似,至少对于基本用法而言。
无论如何,“内置”或标准视图框架叫什么? 它看起来像:
<c:if test="${someobject.property != null}">
【问题讨论】:
标签: java jsp templates jstl el
Unified Expression Language (EL) 最有可能被 JSTL 使用。
我认为它看起来更像
<c:if test="${someobject.property != null}">
【讨论】:
确实是JSTL。但是它不是内置的,但您需要做的只是将 jstl-1.2.jar 放入 /WEB-INF/lib 并根据 TLD 文档在 JSP 页面顶部声明其标记库之一,例如JSTL core:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
这样你就可以使用在链接中列出的标签。大多数core tags 只是流控制标签。 JSTL 也有XML 和SQL 标签库,但它们仅用于快速原型设计,不应用于实际生产。然后是Format (fmt) taglib,它非常适合internationalization and localization(i18n 和 l10n)。最后是有用的functions (fn) taglib,它提供了简单的 EL 函数。
然后是${} 的东西。这称为expression language。它只是在PageContext#findAttribute() 的帮助下访问Javabean 中任何页面、请求、会话和应用程序范围中的“后端数据”(属性)并调用Javabean getters。如果您了解 scriptlets,那么您将了解以下示例:
${user.address.street}
大致解析为
<%= pageContext.findAttrubute("user").getAddress().getStreet() %>
EL 是 nullsafe。当${user} 或${user.address} 解析为null 时,它将跳过所有内容,不显示任何内容。在 scriptlets 中,您会在嵌套调用中获得 NPE,或者在最后一次调用中获得简单的 null。
然后是统一的 EL,用#{} 语法表示。它(到目前为止)仅与JavaServer Faces (JSF) 结合使用。它可以在 last 属性上调用 Javabean setter。例如
<h:inputText name="foo" value="#{bean.foo}">
会在幕后大致做如下
pageContext.findAttribute("bean").setFoo(request.getParameter("foo"));
顺便说一下,它不是一种查看技术。 JSP 本身已经是一种视图技术。 JSTL 只是一个taglib。 EL 只是 JSP 规范的一部分。 Java EE 提供的另一种视图技术是Facelets,它基于 XHTML,与 JSP 相比,为 JSF 提供了更加无缝的集成。
【讨论】: