WebWork2.2新特性(四):使用國際化攔截器


          其實這個I18nInterceptor很簡單,而且實際應用中根據(jù)實際需求需要進行變通,所以這個I18nInterceptor并不是很實用,當然還是提供了一定的參考作用的.

          首先我們來看一下如何使用這個攔截器.

          首先我們需要有一個Action,為了演示,其實最簡單的Action就可以,例如

          public class I18nIcAction extends ActionSupport

          public String execute()
          {
          return SUCCESS;
          }

          展示的頁面例子如下:

          <%@ page contentType="text/html; charset=UTF-8" %>
          <%@ taglib uri="webwork" prefix="ww" %>
          <html>
          <head>
          <title>Test I18n Interceptor</title>
          <meta http-equiv="pragma" content="no-cache">
          <meta http-equiv="cache-control" content="no-cache">
          <meta http-equiv="expires" content="0">
          </head>

          <body>
          Choose: <a href="?locale=en">English Page</a> ,
          <a href="?locale=zh_CN">Chinese Page</a>
          <br><br>
          Content:<ww:text name="desc"/>
          </body>
          </html> 


          其中我們使用"locale"作為locale的參數(shù)名,頁面里面有2個選項:英文和中文.

          對應的資源文件有2個(或者3個,如果包括缺省一個的話):

          英文的I18nIcAction_en.properties內容為:
          desc=english

          中文的I18nIcAction_zh_CN.properties內容為:
          desc=\u7b80\u4f53\u4e2d\u6587

          接下來我們在xwork.xml里面定義我們的action和攔截器:

          <package name="i18nic" extends="webwork-default" namespace="/i18nic">
          <interceptors>
          <interceptor name="i18n" class="com.opensymphony.xwork.interceptor.I18nInterceptor">
          <param name="parameterName">locale</param>
          <param name="attributeName">ww_locale</param>
          </interceptor>

          <interceptor-stack name="i18nStack">
          <interceptor-ref name="i18n"/>
          <interceptor-ref name="defaultStack"/>
          </interceptor-stack>
          </interceptors>

          <default-interceptor-ref name="i18nStack"/>

          <action name="index" class="com.jscud.ww2test.i18nic.I18nIcAction">
          <result name="success" type="dispatcher">
          <param name="location">/i18nic/index.jsp</param>
          </result>
          </action>
          </package> 

          所有的工作都好了,發(fā)布并運行訪問 /i18nic/index.action,一切和預想的一樣.


          通過查看I18nInterceptor的源碼,我們可以看到這個攔截器的工作原理是這樣的:

          1. 如果參數(shù)中指定了locale,那么攔截器分析參數(shù),并把locale保存到session中.
          2. 在后面的action中,攔截器從session中獲取這個locale,并設置action的locale,從而保持用戶的設置.
          3. 在后續(xù)頁面還可以繼續(xù)切換locale.

          從源碼分析結果來看,這樣做也會有一些實際的問題:

          • session過期后,用戶不知道發(fā)生了什么,系統(tǒng)使用缺省的locale.
          • 只能影響通過action操作的頁面

          在實際使用中,我們也要考慮如何解決后面2個問題,例如通過cookie,或者把用戶的配置保存在數(shù)據(jù)庫里等,這些實現(xiàn)就要結合實際代碼進行實現(xiàn)了,完全可以不需要這個I18nInterceptor就可以實現(xiàn),當然也很簡單.

          各取所需,看自己的實際需要吧 :)


          除經(jīng)特別注明外,本文章版權歸JScud Develop團隊或其原作者所有.
          轉載請注明作者和來源. scud(飛云小俠) 歡迎訪問 JScud Develop

           

          posted on 2005-08-31 15:46 Scud(飛云小俠) 閱讀(3305) 評論(10)  編輯  收藏 所屬分類: WEB

          評論

          # re: WebWork2.2新特性(四):使用國際化攔截器 2005-08-31 16:07 dudu

          你的幾篇文章都影響了首頁的顯示, 請調整好格式再發(fā)布。  回復  更多評論   

          # re: WebWork2.2新特性(四):使用國際化攔截器 2005-08-31 16:31 scud

          ... 可是我編輯的時候已經(jīng)我瀏覽的時候都是對的,就是blogjava首頁不對...看源碼也看不出原因啊  回復  更多評論   

          # re: WebWork2.2新特性(四):使用國際化攔截器 2005-08-31 20:32 dudu

          現(xiàn)在好了。  回復  更多評論   

          # re: WebWork2.2新特性(四):使用國際化攔截器 2005-11-16 11:41 Sue

          hi,我根據(jù)你說的方法做了,可是,有這樣的錯誤信息:
          嚴重: Could not execute action
          java.lang.IllegalStateException: Cannot find message associated with key parameterMap.locked
          at org.apache.catalina.util.ParameterMap.remove(ParameterMap.java:204)
          at com.bcbs.ecbp.util.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:62)

          錯誤在代碼行:
          Object requested_locale = params.remove(parameterName);
          parameterName打印出來的值是:locale  回復  更多評論   

          # re: WebWork2.2新特性(四):使用國際化攔截器 2005-11-16 12:02 scud(飛云小俠)

          com.bcbs.ecbp.util.interceptor.I18nInterceptor 是什么??

          文章里沒有用這個啊  回復  更多評論   

          # re: WebWork2.2新特性(四):使用國際化攔截器 2005-11-16 13:52 Sue

          我用的是ww2.1.7,所以就從ww2.2 copy出來放到com.bcbs.ecbp.util.interceptor.I18nInterceptor的...  回復  更多評論   

          # re: WebWork2.2新特性(四):使用國際化攔截器 2005-11-16 15:10 scud(飛云小俠)

          看看這個吧
          http://wiki.opensymphony.com/pages/viewpage.action?pageId=10

          我沒有在2.1.7下用過這個攔截器

          或者是其他地方你寫錯了什么...這個我無從猜測..

            回復  更多評論   

          # re: WebWork2.2新特性(四):使用國際化攔截器 2005-11-18 17:02 sue

          好的。謝謝你了。  回復  更多評論   

          # re: WebWork2.2新特性(四):使用國際化攔截器 2006-02-04 07:53 fdg

          按照你的文章做,可是沒有成功,這么簡單的搞這么久都沒成功,有些失去信心。
          能不能把例子做成附件,提供下載  回復  更多評論   

          # re: WebWork2.2新特性(四):使用國際化攔截器 2006-02-04 08:06 fdg

          你的這個例子要用那些jar呀?
          我把webwork2.2中starter(可以運行)中的包全部拷過來,tomcat日記提示:
          嚴重: Error listenerStart
          2006-2-4 7:55:22 org.apache.catalina.core.StandardContext start
          嚴重: Context [/i18nic] startup failed due to previous errors  回復  更多評論   

          <2005年8月>
          31123456
          78910111213
          14151617181920
          21222324252627
          28293031123
          45678910

          導航

          統(tǒng)計

          公告

          文章發(fā)布許可
          創(chuàng)造共用協(xié)議:署名,非商業(yè),保持一致

          我的郵件
          cnscud # gmail


          常用鏈接

          留言簿(15)

          隨筆分類(113)

          隨筆檔案(103)

          相冊

          友情鏈接

          技術網(wǎng)站

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 曲沃县| 阳原县| 阜康市| 科技| 乌拉特后旗| 双鸭山市| 常德市| 金坛市| 禹城市| 滨海县| 蒙阴县| 蓝山县| 兴山县| 沂南县| 齐齐哈尔市| 夹江县| 盐源县| 德安县| 蚌埠市| 泽州县| 工布江达县| 广东省| 建昌县| 喀喇沁旗| 弥渡县| 衡阳市| 汾阳市| 龙里县| 呼和浩特市| 湟源县| 金乡县| 伊吾县| 湖州市| 吉首市| 巴楚县| 涿州市| 通榆县| 浮山县| 长兴县| 沈丘县| 昌乐县|