日本免费精品_最新日韩一区_亚洲视频一区在线_a在线视频观看_天天射夜夜骑_粉嫩av一区二区三区_欧美中日韩免费视频_综合图区欧美_国内精品美女在线观看_午夜精品久久久久久久男人的天堂

首頁 > 編程 > Java > 正文

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

2019-11-26 16:12:26
字體:
來源:轉載
供稿:網友

一、國際化

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

現在為應用添加兩個資源文件:
第一個存放中文:csdn_zh_CN.properties
內容為:welcome=歡迎來到傳智播客
第二個存放英語(美國): csdn_en_US.properties
內容為: welcome=welcome to csdn

對于中文的屬性文件,我們編寫好后,應該使用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()方法得到國際化信息,該方法的第一個參數用于指定資源文件中的key。
在表單標簽中,通過key屬性指定資源文件中的key,如:
<s:textfield name="realname" key="user"/>

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

資源文件中的內容如下:
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)方法。

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

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

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

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

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

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

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

struts2為我們提供了<s:i18n>標簽,使用<s:i18n>標簽我們可以在類路徑下直接從某個資源文件中獲取國際化數據,而無需任何配置:
<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表達式,它提供了平時我們需要的一些功能,如:
支持對象方法調用,如xxx.sayHello();
支持類靜態方法調用和值訪問,表達式的格式為@[類全名(包括包路徑)]@[方法名 |  值名],例如:@java.lang.String@format('foo %s', 'bar')或@cn.csdn.Constant@APP_NAME;
操作集合對象。

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

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

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

在struts2中,根對象ValueStack的實現類為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'],相當于調用ServletContext的getAttribute("username")。

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

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

parameters對象:用于訪問HTTP的請求參數,例如#parameters.userName或者#parameters['userName'],相當于調用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表達式創建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棧頂的值賦給變量。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲va久久久噜噜噜久久| 国产成人日日夜夜| 一区在线免费| 国产95在线|亚洲| 国产欧美高清在线| 亚洲一区视频在线观看视频| 亚洲欧美伊人| 日本精品在线中文字幕| 成人一区二区不卡免费| 欧美专区中文字幕| 99久久精品国产成人一区二区| 在线欧美日韩精品| 一区二区在线观看不卡| 亚洲一区在线观看网站| 午夜黄色小视频| 欧美日韩乱国产| 国产极品嫩模在线视频一区| 日韩在线 中文字幕| 日韩一级在线视频| 中文字幕精品视频在线| 中文字幕 亚洲视频| 欧洲精品二区| 欧美日韩第一| 亚洲精品欧美二区三区中文字幕 | 中文字幕精品一区二| 日韩一级网站| 国产欧美日韩在线播放| а√天堂中文在线资源8| 99视频一区| 久久99精品久久久久久青青日本| 成片免费观看| 91精品国产丝袜白色高跟鞋| 中文字幕在线观看国产| 日韩精品视频在线观看网址| 不卡视频一区二区| 国产欧美日韩精品在线| 91蜜桃在线视频| 91精品综合久久久久久| 中文字幕在线视频第一页| 不卡福利视频| 大香一本蕉伊线亚洲网| 日韩视频在线一区| 欧美日韩亚洲视频| 日韩欧美在线网站| 欧美99久久| 国产一卡2卡3卡免费网站| 国产欧美日韩亚州综合| 国产视频一区三区| 日韩一级在线视频| 久久精品国产91精品亚洲| 免费日韩精品中文字幕视频在线| 日韩精品综合在线| 中文字幕一区二区三区精品| 亚洲v中文字幕| 国产aa精品| 精品日韩欧美在线| 久久欧美中文字幕| 欧美日韩国产在线播放| 欧美一卡2卡3卡4卡| 欧美日韩精品在线| 91精品国产91综合久久蜜臀| 狠狠色噜噜狠狠狠狠97| 国产嫩草影院久久久久| 欧美变态tickling挠脚心| 欧美三级精品| 中文字幕精品在线| 日本精品免费观看高清观看| 亚洲成av人片| 亚洲一区在线观看视频| 亚洲a一级视频| 日韩精品视频免费在线观看| 欧美日韩在线视频一区| 日本一级一片免费视频| 中文字幕中文字幕精品| 日韩欧美一级精品久久| 色猫猫国产区一区二在线视频 | 一区二区在线看| 国产成人精品亚洲| 久久婷婷国产| 中文 欧美 日韩| 中文字幕日韩亚洲| 久久综合九色欧美综合狠狠| 欧美日韩在线观看一区| 91精品国产91久久久久青草| 黄色在线播放网站| 成人禁用看黄a在线| 99久热re在线精彩视频| 国产欧美亚洲一区| 中文字幕在线观看网址| 国产亚洲视频中文字幕视频| 中文字幕精品亚洲| 欧美日韩在线第一页| 精品亚洲综合| 国产香蕉精品视频| 亚洲一区在线视频观看| www.91香蕉视频| 亚洲中文字幕一区| 亚洲成av人片| 午夜私人影院在线观看| 欧美日韩亚洲系列| 久久婷婷国产| 日韩精品乱码av一区二区| 欧美亚洲另类制服自拍| 色综合久久88色综合天天免费| 中文字幕高清在线播放| 欧美 中文字幕| 国产成人综合av| 日韩欧美在线不卡| 一区二区日韩免费看| 国产永久在线观看| 亚洲а∨精品天堂在线| 午夜成人鲁丝片午夜精品| 欧美日韩亚洲系列| 日韩精品一级| 中文字幕综合在线| 色综合天天性综合| 国产福利精品导航| 国产丝袜欧美中文另类| 日韩精品视频在线播放| 色综合天天性综合| 欧美日韩视频网站| 日韩av中文字幕一区| 一区三区二区视频| 欧美激情视频一区二区三区在线播放| 日韩在线视频免费观看| 久久久精品国产99久久精品芒果| 国产乱一区二区| 中文字幕亚洲区| 麻豆精品99| 欧美日韩人人澡狠狠躁视频| 日韩欧美99| 国产激情在线播放| 中文字幕综合在线| 亚洲免费看av| 精品九九久久| www.久久草| 日本免费在线视频不卡一不卡二| 亚洲大片免费看| 日韩三级视频在线播放| 丰满少妇一区| 国自产拍在线网站网址视频| 欧美激情一区二区在线| 中文官网资源新版中文第二页在线观看| 九一久久久久久| 不卡视频一区二区三区| 欧美一级欧美三级在线观看| 日韩 欧美 亚洲| 中文精品视频| 国产一级片播放| 精品成a人在线观看| 国产传媒久久久| 亚洲黄页一区| 丰满少妇一区二区| 亚洲视频在线观看三级| 中文字幕亚洲高清| 欧美三级日韩三级| 亚洲第一网中文字幕| 亚洲国产福利| 一区二区在线观| 欧美日韩国产专区| 在线观看区一区二| 中文在线日韩| 樱花草www在线观看| 欧美日韩国产123区| 日韩三区免费| 日韩中文字幕91| 视频一区二区国产| 国产视频1区| 国产激情在线视频| 国产福利第一页| 亚洲高清视频一区| 欧美在线日韩在线| 久久夜色精品国产噜噜亚洲av| 国产高清视频一区二区| 日韩av一区二| 中文字幕久精品免费视频| 国产免费一级| 日韩在线中文| 中文字幕欧美国内| 91精品国产91久久久久久不卡 | 99色在线视频| 先锋男人资源站| 精品日韩av| 日本精品专区| 久久久91精品| 欧美日韩中文字幕| 欧美日韩精品免费看| 亚洲欧美中文字幕在线观看| 欧美高清一级片在线| 亚洲一区在线观看网站| 国产激情久久久| 欧美区高清在线| 在线观看精品国产| 在线欧美日韩精品| 欧美日韩在线精品成人综合网 | av一区在线| 欧美日韩中文字幕在线视频| 久久99精品久久久| 伊人中文字幕在线观看| 亚洲欧美中文在线视频| 国产手机精品视频| 香蕉人人精品| 国产一区深夜福利| 日韩一级二级三级| 欧美日韩免费高清| 日韩视频在线免费播放| 国产绿帽一区二区三区| 欧美日韩综合不卡| 91精品国产乱码久久蜜臀| 日韩一级免费视频| 国产色综合网| 国产一区在线观看视频| 日韩不卡在线播放| www高清在线视频日韩欧美| 婷婷中文字幕一区三区| 欧美久久在线观看| 亚洲福利视频专区| 中文字幕 亚洲一区| 欧美日韩激情一区二区三区| 欧美日韩视频免费看| 欧美日韩在线观看一区| 亚洲免费中文字幕| 在线国产91| 久久99蜜桃精品久久久久小说| 色综合婷婷久久| 国产欧美日韩亚洲| 91精品国产91久久久久久不卡| 蜜桃视频中文字幕| 先锋男人资源站| 日韩欧美高清在线| 日韩欧美亚洲视频| 日韩欧美国产亚洲| 国产三级视频网站| 91精品视频国产| 日韩高清在线一区二区| 欧美国产日韩在线播放| www.xxxx精品| 国产成人精品亚洲| 一区二区不卡久久精品| 亚洲综合在线不卡| 久久riav| 日韩国产高清一区| 91精品在线国产| 亚洲一区不卡在线| 一区二区三区在线播放视频| 久久精品久久久久| 蜜桃视频一日韩欧美专区| eeuss一区| 久久精品国产99| 在线看欧美日韩| 五月综合激情日本mⅴ| 亚洲综合在线小说| 一区二区视频在线观看免费的| 99国产成 人 综合 亚洲欧美 | 日韩 欧美 中文| 午夜亚洲一区| 国产成人精品网址| 亚洲国产综合久久| 99日韩精品| 国产日韩中文在线| 日韩欧美在线精品| 99久久精品国产成人一区二区| 一区二区日韩免费看| 欧美日韩国产第一页| 久久精品不卡| 精品国产31久久久久久| 先锋男人资源站| 欧美成人精品在线| 亚洲三级免费看| 综合激情一区| 国产精品福利视频一区二区三区| 欧美日韩精品区| 日韩欧美在线1卡| 999精品网| 三级网站免费观看| 日韩国产欧美亚洲| 欧美日韩一区二区在线视频| 久久精品国产91精品亚洲 | 欧美亚洲综合视频| 国产不卡在线观看视频| 伊人永久在线| 91精品国产91| 亚洲高清视频在线| 精品福利一区二区三区| 精品国产免费观看一区| 久久福利视频一区二区| 中文字幕第一页在线播放| 91精品国产综合久久久久久| 亚洲欧美日本另类| 欧美日韩中文| 国产福利一区二区精品秒拍| 日韩亚洲国产欧美| 亚洲成年网站在线观看| 国产成人一区二区精品非洲| 亚洲福利在线看| 国产黄色小视频| 美国av一区二区| 黄色一区二区视频| 中文字幕 亚洲一区| 日本中文字幕在线观看| 天堂在线一区二区三区| 日韩 欧美 亚洲| 中文字幕第一页在线播放| 三级网站免费观看| 最新中文字幕在线| 精品网站999www| 国产网站欧美日韩免费精品在线观看| 日本黄色一区二区| 在线精品日韩| 一级片在线免费看| 欧美日韩在线播放一区| 一区二区日韩av| 精品久久蜜桃| 欧美亚洲国产日韩| 国产日韩第一页v| 最近中文av字幕在线中文| 91色在线看| 91精品国产综合久久久久| 日韩一级在线视频 | 亚洲精品欧美二区三区中文字幕| 欧美三级免费观看| 国产蜜臀在线| 欧美日韩中文字幕精品| 亚洲精华国产欧美| 久久99精品久久久久久青青日本 | 国产欧美综合视频| 亚洲一区中文| 欧美日韩在线中文字幕| 精品久久久视频| 日本a口亚洲| 国产导航在线| 久久婷婷中文字幕| 一区二区高清视频| 国产成人精品免费网站| 天堂在线视频中文网| 日韩精品―中文字幕| 一区二区三区精品99久久| 成人久久在线| 国产成免费视频| 国产导航在线| 午夜一区二区三区| 中文在线一区二区| 欧美日韩亚洲综合在线| 不卡中文一二三区| 最近中文字幕第一页| 日韩精品视频免费播放| 欧美日韩第一区日日骚| 亚洲国产欧美日韩精品| 国产一卡2卡3卡免费网站| 欧美日韩三级在线观看| 精人妻一区二区三区| 一区二区三区鲁丝不卡| 日韩视频国产视频| 亚洲丝袜一区| av中文资源在线| 欧美日韩国产999| 欧美日韩国产综合视频在线观看| 高清一区二区| 中文字幕国产亚洲| 一区三区二区视频| 中文字幕欧美日韩在线| 日韩欧美一卡二卡| 日韩欧美综合在线视频| 亚洲免费观看在线观看| 亚洲一区视频在线观看视频| 欧美日韩视频在线| 精品免费久久久| av午夜在线| 国产超级va在线视频| 国产欧美日韩视频在线| 中文字幕视频在线观看| 不卡av免费在线| 日韩一二三四区| 亚洲欧美伊人| 日韩免费看网站| 亚洲综合日韩中文字幕v在线| 欧美日韩精品欧美日韩精品一| 国产999在线观看| 国产字幕在线看| 亚洲区中文字幕| 人妻一区二区三区免费| 91精品国产91久久久久久青草| 国产永久在线观看| 国产日韩精品久久久| 国产在线黄色片| 日韩不卡一二区| 亚洲第一视频网站| 国产羞羞视频在线播放| 中文字幕亚洲一区在线观看| 国产在线不卡av| 欧美日韩国产一区| av免费不卡国产观看| 91精品国产综合久久香蕉最新版| 在线资源av| 亚洲人线精品午夜| 亚亚洲欧洲精品| 日韩在线二区| wwwwww国产| 欧美日韩国产观看视频| 中文字幕五月欧美|