2010-02-25 153 views
1

看起來velocity和freemarker看起來相當類似,至少對於基本用法來說。這是什麼java視圖技術?

無論如何,什麼是「內置」或標準視圖框架調用? 它看起來像:

<c:if test="${someobject.property != null}"> 

回答

5

這的確JSTL。但不是內置的,但您需要做的僅僅是將jstl-1.2.jar放在/WEB-INF/lib中,並根據TLD文檔(例如TLD文檔)在JSP頁面的頂部聲明它的一個taglib。 JSTL core

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

這樣您就可以使用鏈接列出的標籤了。 core tags大部分只是流量控制標籤。 JSTL也有XMLSQL taglibs,但它們只用於快速原型設計,不應在實際生產中使用。然後是Format (fmt) taglib,這對於internationalization and localization(i18n和l10n)很好。最後是有用的functions (fn) taglib,它提供簡單的EL功能。

然後有${}的東西。這被稱爲expression language。它只是在PageContext#findAttribute()的幫助下以類似於Javabean的方式訪問任何頁面,請求,會話和應用程序範圍中的「後端數據」(屬性),並調用Javabean 獲取者。如果你瞭解小腳本,那麼你就會明白下面的例子:

${user.address.street} 

這大致解析

<%= pageContext.findAttrubute("user").getAddress().getStreet() %> 

EL是nullsafe。當${user}${user.address}解決爲null,那麼它只會跳過它並不顯示任何內容。在scriptlets你將在嵌套的調用上獲得NPE,或者在最後一次調用時獲得簡單的null

然後是統一的EL,用#{}語法表示。它(至今)僅與JavaServer Faces (JSF)結合使用。它能夠通過調用Javabean 設置器上的上一個屬性。例如。

<h:inputText name="foo" value="#{bean.foo}"> 

將在幕後做大致如下一樣

pageContext.findAttribute("bean").setFoo(request.getParameter("foo")); 

它的方式不是視圖技術。 JSP本身已經是它自己的視圖技術。 JSTL只是一個taglib。 EL只是JSP規範的一部分。 Java EE提供的另一種視圖技術是基於XHTML的Facelets,它提供了比JSP更多的JSF無縫集成。