这是什么java视图技术?

Bla*_*man 1 java templates jsp jstl el

似乎速度和freemarker看起来相似,至少对于基本用法而言.

无论如何,什么是"内置"或标准视图框架?看起来像:

<c:if test="${someobject.property != null}">
Run Code Online (Sandbox Code Playgroud)

ScA*_*er2 6

它最有可能是JSTL使用的统一表达语言(EL).

我觉得它看起来更像

<c:if test="${someobject.property != null}">
Run Code Online (Sandbox Code Playgroud)


Bal*_*usC 5

这确实是JSTL.它然而,并非内置,但所有你需要做的就是刚落JSTL-1.2.jar/WEB-INF/lib并宣布其标签库之一,在JSP页面的顶部,按照TLD文件,如JSTL核心:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
Run Code Online (Sandbox Code Playgroud)

这样您就可以使用链接中列出的标签.大多数核心标签只是流量控制标签.JSTL还具有XMLSQL标签库,但它们仅用于快速原型设计,不应在实际生产中使用.然后是Format(fmt) taglib,非常适合国际化和本地化(i18n和l10n).最后有一些有用的函数(fn) taglib,它提供了简单的EL函数.

然后有${}事情.这称为表达语言.它只是在Javabean的任何页面,请求,会话和应用程序范围内通过帮助PageContext#findAttribute()和调用Javabean getter来访问"后端数据"(属性).如果您了解scriptlet,那么您将理解以下示例:

${user.address.street}
Run Code Online (Sandbox Code Playgroud)

这大致可以解决

<%= pageContext.findAttrubute("user").getAddress().getStreet() %>
Run Code Online (Sandbox Code Playgroud)

EL是无效的.当解析${user}${user.address}解析时null,它将跳过它并且不显示任何内容.在scriptlet中,您可以在嵌套调用上获得NPE,或者null在最后一次调用时获得简单.

然后是统一的EL,用#{}语法表示.它(目前为止)仅与JavaServer Faces(JSF)结合使用.它可以在最后一个属性上调用Javabean setter.例如

<h:inputText name="foo" value="#{bean.foo}">
Run Code Online (Sandbox Code Playgroud)

幕后将大致如下所示

pageContext.findAttribute("bean").setFoo(request.getParameter("foo"));
Run Code Online (Sandbox Code Playgroud)

顺便说一句,它不是一种视图技术.JSP本身已经是视图技术本身.JSTL只是一个taglib.EL只是JSP规范的一部分.Java EE提供的另一种视图技术是基于XHTML的Facelets,它为JSF提供了比JSP更无缝的集成.