似乎速度和自由标记看起来非常相似,至少在基本用途方面。
无论如何,什么是“内置”或标准视图框架? 它看起来像:
<c:if test="${someobject.property != null}">
答案 0 :(得分:6)
答案 1 :(得分:5)
确实是JSTL。然而,它不是内置的,但您只需将jstl-1.2.jar放在/WEB-INF/lib
中,并根据TLD文档在JSP页面的顶部声明其中一个taglib,例如: JSTL core:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
这样您就可以使用链接中列出的标签。大多数core tags只是流量控制标签。 JSTL还有XML和SQL taglibs,但它们仅用于快速原型设计,不应在实际生产中使用。然后有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 。 E.g。
<h:inputText name="foo" value="#{bean.foo}">
将在幕后粗略地做如下
pageContext.findAttribute("bean").setFoo(request.getParameter("foo"));
这不是视图技术。 JSP本身已经是视图技术本身。 JSTL只是一个 taglib 。 EL只是JSP规范的一部分。 Java EE提供的另一种视图技术是Facelets,它基于XHTML,为JSF提供了比JSP更无缝的集成。