最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關于國際化、OGNL表達式語言

 更新時間:2013年04月11日 16:12:15   投稿:jingxian  
本篇文章,小編為大家介紹關于國際化、OGNL表達式語言,有需要的朋友可以參考一下

一、國際化

準備資源文件,資源文件的命名格式如下:
baseName_language_country.properties
baseName_language.properties
baseName.properties
其中baseName是資源文件的基本名,我們可以自定義,但language和country必須是java支持的語言和國家。

對于中文的屬性文件,我們編寫好后,應該使用jdk提供的native2ascii命令把文件轉換為unicode編碼的文件。命令的使用方式如下:
native2ascii  源文件.properties  目標文件.properties

二、配置全局資源與輸出國際化信息

當準備好資源文件之后,我們可以在struts.xml中通過struts.custom.i18n.resources常量把資源文件定義為全局資源文件,如下:
<constant name="struts.custom.i18n.resources" value=“csdn" />
csdn為資源文件的基本名。

后面我們就可以在頁面或在action中訪問國際化信息:
在JSP頁面中使用<s:text name=“”/>標簽輸出國際化信息:
<s:text name=“user”/>,name為資源文件中的key
在Action類中,可以繼承ActionSupport,使用getText()方法得到國際化信息,該方法的第一個參數(shù)用于指定資源文件中的key。
在表單標簽中,通過key屬性指定資源文件中的key,如:
<s:textfield name="realname" key="user"/>

三、國際化—輸出帶占位符的國際化信息

資源文件中的內(nèi)容如下:
welcome= {0},歡迎來到傳智播客{1}

在jsp頁面中輸出帶占位符的國際化信息
<s:text name="welcome">
    <s:param><s:property value="realname"/></s:param>
 <s:param>學習</s:param>
</s:text>

在Action類中獲取帶占位符的國際化信息,可以使用getText(String key, String[] args)或getText(String aTextName, List args)方法。

四、國際化—包范圍資源文件

在一個大型應用中,整個應用有大量的內(nèi)容需要實現(xiàn)國際化,如果我們把國際化的內(nèi)容都放置在全局資源屬性文件中,顯然會導致資源文件變的過于龐大、臃腫,不便于維護,這個時候我們可以針對不同模塊,使用包范圍來組織國際化文件。

方法如下:
在java的包下放置package_language_country.properties資源文件,package為固定寫法,處于該包及子包下的action都可以訪問該資源。當查找指定key的消息時,系統(tǒng)會先從package資源文件查找,當找不到對應的key時,才會從常量struts.custom.i18n.resources指定的資源文件中尋找。

五、國際化—Action范圍資源文件

我們也可以為某個action單獨指定資源文件,方法如下:
在Action類所在的路徑,放置ActionClassName_language_country.properties資源文件,ActionClassName為action類的簡單名稱。

當查找指定key的消息時,系統(tǒng)會先從ActionClassName_language_country.properties資源文件查找,如果沒有找到對應的key,然后沿著當前包往上查找基本名為package 的資源文件,一直找到最頂層包。如果還沒有找到對應的key,最后會從常量struts.custom.i18n.resources指定的資源文件中尋找。

六、國際化—JSP中直接訪問某個資源文件

struts2為我們提供了<s:i18n>標簽,使用<s:i18n>標簽我們可以在類路徑下直接從某個資源文件中獲取國際化數(shù)據(jù),而無需任何配置:
<s:i18n name=“csdn">
    <s:text name=“welcome”/>
</s:i18n>
csdn為類路徑下資源文件的基本名。

如果要訪問的資源文件在類路徑的某個包下,可以這樣訪問:
<s:i18n name=“cn/csdn/action/package">
   <s:text name="welcome">
    <s:param>小張</s:param>
   </s:text>
</s:i18n>
上面訪問cn.csdn.action包下基本名為package的資源文件。

七、OGNL表達式語言

OGNL是Object Graphic Navigation Language(對象圖導航語言)的縮寫,它是一個開源項目。 Struts 2框架使用OGNL作為默認的表達式語言。

相對EL表達式,它提供了平時我們需要的一些功能,如:
支持對象方法調(diào)用,如xxx.sayHello();
支持類靜態(tài)方法調(diào)用和值訪問,表達式的格式為@[類全名(包括包路徑)]@[方法名 |  值名],例如:@java.lang.String@format('foo %s', 'bar')或@cn.csdn.Constant@APP_NAME;
操作集合對象。

Ognl 有一個上下文(Context)概念,說白了上下文就是一個MAP結構,它實現(xiàn)了java.utils.Map接口,在Struts2中上下文(Context)的實現(xiàn)為ActionContext,下面是上下文(Context)的結構示意圖

訪問上下文(Context)中的對象需要使用#符號標注命名空間,如#application、#session

另外OGNL會設定一個根對象(root對象),在Struts2中根對象就是ValueStack(值棧) 。如果要訪問根對象(即ValueStack)中對象的屬性,則可以省略#命名空間,直接訪問該對象的屬性即可。

在struts2中,根對象ValueStack的實現(xiàn)類為OgnlValueStack,該對象不是我們想像的只存放單個值,而是存放一組對象。在OgnlValueStack類里有一個List類型的root變量,就是使用他存放一組對象
   |--request  
   |--application  
context ------|--OgnlValueStack root變量[action, OgnlUtil, ... ]  
   |--session  
   |--attr  
   |--parameters

在root變量中處于第一位的對象叫棧頂對象。通常我們在OGNL表達式里直接寫上屬性的名稱即可訪問root變量里對象的屬性,搜索順序是從棧頂對象開始尋找,如果棧頂對象不存在該屬性,就會從第二個對象尋找,如果沒有找到就從第三個對象尋找,依次往下訪問,直到找到為止。
大家注意: Struts2中,OGNL表達式需要配合Struts標簽才可以使用。如:<s:property value="name"/>

由于ValueStack(值棧)是Struts 2中OGNL的根對象,如果用戶需要訪問值棧中的對象,在JSP頁面可以直接通過下面的EL表達式訪問ValueStack(值棧)中對象的屬性:
${foo} //獲得值棧中某個對象的foo屬性

如果訪問其他Context中的對象,由于他們不是根對象,所以在訪問時,需要添加#前綴。
application對象:用于訪問ServletContext,例如#application.userName或者#application['userName'],相當于調(diào)用ServletContext的getAttribute("username")。

session對象:用來訪問HttpSession,例如#session.userName或者#session['userName'],相當于調(diào)用session.getAttribute("userName")。

request對象:用來訪問HttpServletRequest屬性(attribute)的Map,例如#request.userName或者#request['userName'],相當于調(diào)用request.getAttribute("userName")。

parameters對象:用于訪問HTTP的請求參數(shù),例如#parameters.userName或者#parameters['userName'],相當于調(diào)用request.getParameter("username")。

attr對象:用于按page->request->session->application順序訪問其屬性。

八、為何使用EL表達式能夠訪問valueStack中對象的屬性

原因是Struts2對HttpServletRequest作了進一步的封裝。簡略代碼如下:

 public class StrutsRequestWrapper extends HttpServletRequestWrapper {
       public StrutsRequestWrapper(HttpServletRequest req) {
           super(req);
       }
       public Object getAttribute(String s) {
        ......
        ActionContext ctx = ActionContext.getContext();
        Object attribute = super.getAttribute(s);//先從request范圍獲取屬性值
        if (ctx != null) {
            if (attribute == null) {//如果從request范圍沒有找到屬性值,即從ValueStack中查找對象的屬性值
               ......
               ValueStack stack = ctx.getValueStack();
               attribute = stack.findValue(s);
               ......
            }
        }
        return attribute;
    }
 }

九、采用OGNL表達式創(chuàng)建List/Map集合對象

如果需要一個集合元素的時候(例如List對象或者Map對象),可以使用OGNL中同集合相關的表達式。
使用如下代碼直接生成一個List對象:
 <s:set name="list" value="{'zhangming','xiaoi','liming'}" />
<s:iterator value="#list" id="n">
 <s:property value="n"/><br>
</s:iterator>

生成一個Map對象:
<s:set name="foobar" value="#{'foo1':'bar1', 'foo2':'bar2'}" />
<s:iterator value="#foobar" >
 <s:property value="key"/>=<s:property value="value"/><br>
</s:iterator>

Set標簽用于將某個值放入指定范圍。
scope:指定變量被放置的范圍,該屬性可以接受application、session、request、 page或action。如果沒有設置該屬性,則默認放置在OGNL Context中。
value:賦給變量的值.如果沒有設置該屬性,則將ValueStack棧頂?shù)闹蒂x給變量。

相關文章

  • 詳解如何使用IntelliJ IDEA生成UML圖

    詳解如何使用IntelliJ IDEA生成UML圖

    在軟件開發(fā)中,UML(統(tǒng)一建模語言)是一種用于描述、構建和文檔化軟件系統(tǒng)的圖形化語言,它幫助開發(fā)者以可視化的方式理解系統(tǒng)的結構和行為,手動繪制 UML 圖可能既耗時又容易出錯,所以本文給大家介紹了如何使用IntelliJ IDEA生成UML圖,需要的朋友可以參考下
    2024-10-10
  • 解決idea services窗口不見的一種特殊情況(小白采坑系列)

    解決idea services窗口不見的一種特殊情況(小白采坑系列)

    這篇文章主要介紹了解決idea services窗口不見的一種特殊情況(小白采坑系列),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • 一篇文章帶你了解Java中ThreadPool線程池

    一篇文章帶你了解Java中ThreadPool線程池

    線程池可以控制運行的線程數(shù)量,本文就線程池做了詳細的介紹,需要了解的小伙伴可以參考一下
    2021-08-08
  • Java注解(annotation)簡述

    Java注解(annotation)簡述

    這篇文章主要介紹了使用java的注解(用在java類的方法上的注解)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-08-08
  • java.lang.ClassCastException的問題解決

    java.lang.ClassCastException的問題解決

    本文主要介紹了java.lang.ClassCastException的問題解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-06-06
  • Spring Security實現(xiàn)禁止用戶重復登陸的配置原理

    Spring Security實現(xiàn)禁止用戶重復登陸的配置原理

    這篇文章主要介紹了Spring Security實現(xiàn)禁止用戶重復登陸的配置原理,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12
  • 詳解Java中Callable和Future的區(qū)別

    詳解Java中Callable和Future的區(qū)別

    這篇文章主要介紹了Java中Callable和Future的區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2022-11-11
  • SpringBoot整合Ip2region獲取IP地址和定位的詳細過程

    SpringBoot整合Ip2region獲取IP地址和定位的詳細過程

    ip2region v2.0 - 是一個離線IP地址定位庫和IP定位數(shù)據(jù)管理框架,10微秒級別的查詢效率,提供了眾多主流編程語言的 xdb 數(shù)據(jù)生成和查詢客戶端實現(xiàn) ,這篇文章主要介紹了SpringBoot整合Ip2region獲取IP地址和定位,需要的朋友可以參考下
    2023-06-06
  • mybatis的插件機制示例詳解

    mybatis的插件機制示例詳解

    這篇文章主要給大家介紹了關于mybatis插件機制的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用mybatis具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-06-06
  • java之路徑分隔符介紹

    java之路徑分隔符介紹

    考慮到程序的可移植性,創(chuàng)建文件時建議大家選用"/",因為經(jīng)過測試用java創(chuàng)建文件時在windows平臺下用“/”也是可以的,java貌似在后臺作過處理了。
    2013-03-03

最新評論

尉氏县| 柘城县| 汉中市| 类乌齐县| 富平县| 松原市| 资中县| 疏勒县| 辽宁省| 万源市| 文水县| 登封市| 监利县| 汶上县| 清远市| 长宁区| 五家渠市| 武隆县| 新余市| 长白| 洪雅县| 浑源县| 怀远县| 德惠市| 孝昌县| 河北区| 原平市| 淮北市| 航空| 长白| 大洼县| 乌兰察布市| 弥渡县| 乐安县| 疏附县| 育儿| 莎车县| 黑龙江省| 荔浦县| 虞城县| 班玛县|