日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Struts2解析FreeMarker模板中变量的顺序

發布時間:2024/4/17 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Struts2解析FreeMarker模板中变量的顺序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

http://zhxing.iteye.com/blog/391560

關于FreeMarker 的基礎學習請參考文檔。。這里主要記錄 FreeMarker 的一些問題。。

1.FreeMarker? 亂碼問題

???? 在struts2 中s:component默認是使用freemarker模板方式處理

???? IDE是MyEclipse6.5,使用的是默認的GBK編碼:可以在這里查看:Window->Preferences->Workspace->Text file encoding

??? struts2的配置文件中是這么配置編碼的:<constant name="struts.i18n.encoding" value="utf-8" />?

??? 使用s:component時,模板頁內容有中文時會亂碼,在網上查了一通,自已又嘗試了多種方式,一直無法解決亂碼問題,郁悶了很長一段時間。無意間發現,修改ftl文件的編碼即可很容易解決亂碼問題:選擇ftl文件->右鍵->Properties->Text file encoding,改為utf-8。

?

2、FreeMarker 和Struts2 的整合

?

Xml代碼 ?
  • 在FreeMarker模板中使用標簽畢竟不同于在JSP頁面中使用標簽,因為FreeMarker不支持使用taglib指令來導入標簽庫.但Struts2為了在FreeMarker模板中使用標簽庫提供了額外的支持.可以按照下面的步驟進行: ??
  • 1,將系統所需要的標簽庫定義文件(.tld文件)復制到WEB-INF目錄下,對于Struts2,則是復制struts2-core-2.0.11.2.jar中的META-INF\struts-tags.tld文件 ??
  • 2,在web.xml文件中啟動JspSupportServlet.為了啟動它,則應該在web.xml文件中增加如下配置片段: ??
  • <!--?定義一個JspSupportServlet?-->??
  • <servlet>??
  • ???<servlet-name>JspSupportServlet</servlet-name>??
  • ???<servlet-class>org.apache.struts2.views.JspSupportServlet</servlet-class>??
  • ???<!--?配置JspSupportServlet優先啟動?-->??
  • ???<load-on-startup>1</load-on-startup>??
  • </servlet>??
  • 3,在FreeMarker模板中使用assign指令導入標簽庫,導入標簽庫的代碼如下: ??
  • <#--?定義/WEB-INF/struts-tags.tld文件對應的標簽庫前綴為s?-->??
  • <#assign?s=JspTaglibs["/WEB-INF/struts-tags.tld"]?/>??
  • 在FreeMarker模板中使用標簽畢竟不同于在JSP頁面中使用標簽,因為FreeMarker不支持使用taglib指令來導入標簽庫.但Struts2為了在FreeMarker模板中使用標簽庫提供了額外的支持.可以按照下面的步驟進行: 1,將系統所需要的標簽庫定義文件(.tld文件)復制到WEB-INF目錄下,對于Struts2,則是復制struts2-core-2.0.11.2.jar中的META-INF\struts-tags.tld文件 2,在web.xml文件中啟動JspSupportServlet.為了啟動它,則應該在web.xml文件中增加如下配置片段: <!-- 定義一個JspSupportServlet --> <servlet><servlet-name>JspSupportServlet</servlet-name><servlet-class>org.apache.struts2.views.JspSupportServlet</servlet-class><!-- 配置JspSupportServlet優先啟動 --><load-on-startup>1</load-on-startup> </servlet> 3,在FreeMarker模板中使用assign指令導入標簽庫,導入標簽庫的代碼如下: <#-- 定義/WEB-INF/struts-tags.tld文件對應的標簽庫前綴為s --> <#assign s=JspTaglibs["/WEB-INF/struts-tags.tld"] />

    ?

    ?

    Html代碼 ?
  • Struts2解析FreeMarker模板中變量的順序如下: ??
  • ??
  • 1,FreeMarker模板內建的變量; ??
  • 2,ValueStack中的變量; ??
  • 3,ActionContext中的變量; ??
  • 4,HttpServletRequest中的屬性; ??
  • 5,HttpSession中的屬性; ??
  • 6,ServletContext范圍的屬性. ??
  • ??
  • FreeMarker模板的內建變量有如下幾個: ??
  • 1,stack:代表ValueStack本身,可通過如下方式來訪問其中的變量"${stack.findString('ognl?expr')}" ??
  • 2,action:代表剛剛執行過的Action實例 ??
  • 3,response:代表HpptServletResponse實例 ??
  • 4,res:代表HpptServletResponse實例 ??
  • 5,request:代表HpptServletRequest實例 ??
  • 6,req:代表HpptServletRequest實例 ??
  • 7,session:代表HpptSession實例 ??
  • 8,application:代表ServletContext實例 ??
  • 9,base:代表用戶請求的上下文路徑. ??
  • ??
  • FreeMarker中訪問Servlet/JSP范圍對象 ??
  • ??
  • Struts2還為在FreeMarker模板中訪問Servlet/JSP范圍對象提供了支持,通過這種支持可以直接訪問這些變量. ??
  • 訪問application范圍內的屬性代碼如下: ??
  • <#if?Application.attributeName?exists>??
  • ${Application.attributeName} ??
  • </#if>??
  • 也可以通過使用Struts2標簽來輸出,代碼如下: ??
  • <@s.property?value="${#application.attributeName}"?/>??
  • ??
  • 訪問session范圍內的屬性如下: ??
  • <#if?Session.attributeName?exists>??
  • ${Session.attributeName} ??
  • </#if>??
  • 或 ??
  • <@s.property?value="${#session.attributeName}"?/>??
  • ??
  • 訪問request范圍內的屬性如下: ??
  • <#if?Request.attributeName?exists>??
  • ${Request.attributeName} ??
  • </#if>??
  • 或 ??
  • <@s.property?value="${#request.attributeName}"?/>??
  • ??
  • 對于request,還可以訪問request的請求參數,如下: ??
  • <#if?Parameter.parameterName?exists>??
  • ${Parameter.parameterName} ??
  • </#if>??
  • 或 ??
  • <@s.property?value="${#parameter.parameterName}"?/>??
  • ??
  • 訪問ValueStack上下文參數,代碼如下: ??
  • ${stack.findValue('#myContextParam')} ??
  • 或 ??
  • <@s.property?value="${#myContextParam}"?/>??
  • Struts2解析FreeMarker模板中變量的順序如下:1,FreeMarker模板內建的變量; 2,ValueStack中的變量; 3,ActionContext中的變量; 4,HttpServletRequest中的屬性; 5,HttpSession中的屬性; 6,ServletContext范圍的屬性.FreeMarker模板的內建變量有如下幾個: 1,stack:代表ValueStack本身,可通過如下方式來訪問其中的變量"${stack.findString('ognl expr')}" 2,action:代表剛剛執行過的Action實例 3,response:代表HpptServletResponse實例 4,res:代表HpptServletResponse實例 5,request:代表HpptServletRequest實例 6,req:代表HpptServletRequest實例 7,session:代表HpptSession實例 8,application:代表ServletContext實例 9,base:代表用戶請求的上下文路徑.FreeMarker中訪問Servlet/JSP范圍對象Struts2還為在FreeMarker模板中訪問Servlet/JSP范圍對象提供了支持,通過這種支持可以直接訪問這些變量. 訪問application范圍內的屬性代碼如下: <#if Application.attributeName?exists> ${Application.attributeName} </#if> 也可以通過使用Struts2標簽來輸出,代碼如下: <@s.property value="${#application.attributeName}" />訪問session范圍內的屬性如下: <#if Session.attributeName?exists> ${Session.attributeName} </#if> 或 <@s.property value="${#session.attributeName}" />訪問request范圍內的屬性如下: <#if Request.attributeName?exists> ${Request.attributeName} </#if> 或 <@s.property value="${#request.attributeName}" />對于request,還可以訪問request的請求參數,如下: <#if Parameter.parameterName?exists> ${Parameter.parameterName} </#if> 或 <@s.property value="${#parameter.parameterName}" />訪問ValueStack上下文參數,代碼如下: ${stack.findValue('#myContextParam')} 或 <@s.property value="${#myContextParam}" />

    ?

    ?3、FreeMarker 的內建函數

    chunk,? is_date,? last,? root,? j_string,? round,? contains,? is_hash,? long,??float,? ends_with,? namespace,? matches,? time,? values,? seq_last_index_of,? uncap_first,? byte,? substring,? is_transform,? web_safe,? groups,? seq_contains,? is_macro,? index_of,? word_list,? int,? is_method,? eval,? parent,? xml,? number,? capitalize,? if_exists,? rtf,? node_type,? double,? is_directive,? url,? size,? default,? floor,? ceiling,?is_boolean,? split,? node_name,? is_enumerable,? seq_index_of,? is_sequence,? sort,? is_node,?
    sort_by,? left_pad,? cap_first,? interpret,? children,? node_namespace,? chop_linebreak,?date,? short,? last_index_of,? is_collection,? ancestors,? length,? trim,? datetime,?is_string,? reverse,? c,? keys,? upper_case,? js_string,? has_content,? right_pad,? replace,? is_hash_ex,? new,? is_number,? lower_case,? is_indexable,? string,? exists,? html,? first

    ?

    具體的用途,以后有空再總結,最近用到的有

    Html代碼 ?
  • 一般寫法是這個樣子的 ??
  • ??
  • <#list?dataEntity?as?de>??
  • ??
  • <a?href="${de.url}">${de.name}</a>??
  • ??
  • </#list>??
  • ??
  • ??
  • 要是排序,則用 ??
  • ??
  • <#list?dataEntity?sort?as?de>??
  • ??
  • <a?href="${de.url}">${de.name}</a>??
  • ??
  • </#list>??
  • ??
  • 這是按元素的首字母排序。若要按list中對象元素的某一屬性排序的話,則用 ??
  • ??
  • <#list?dataEntity?sort_by([“name”])?as?de>??
  • ??
  • <a?href="${de.url}">${de.name}</a>??
  • ??
  • </#list>??
  • ??
  • 這個是按list中對象元素的[name]屬性排序的,是升序,而我們大多情況要用到降排序,這時得改成如下的樣子: ??
  • ??
  • <#list?dataEntity?sort_by([“name”])?reverse?as?de>??
  • ??
  • <a?href="${de.url}">${de.name}</a>??
  • ??
  • </#list>??

  • 總結

    以上是生活随笔為你收集整理的Struts2解析FreeMarker模板中变量的顺序的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。