传智播客-struts2(5)-url标签的巧用、国际化

来源:互联网 发布:python 脚本语言 编辑:程序博客网 时间:2024/05/20 09:47

struts2的标签库很丰富,尤其是再加上OGNL表达示更是如虎添翼。下面重点讲讲开发中最常用的两类标签:url和i18n的应用。

 

<s:url>标签的巧用
url标签的典型应用:
<s:url namespace="/user" action="regUser" var="myurl" includeParams="all" escapeAmp="false">
 <s:param name="name" value="'张三'"></s:param>
</s:url>
<a href="<s:property value="myurl"/>">提交</a>

 

1、使用<s:url action="" namespace="" method="" />不用关心web应用程序的路径和Action映射的扩展名。<s:url>中没有指定namespace属性时,将根据浏览器当前所访问的url地址来推测包名,并与action属性指定的内容一起生成最终的url地址。例如,当开发完一个项目部署到用户的服务上时,如果用户更改了该项目名,不用修改任何代码依然可以通过修改后的项目名(contex root)正常访问。

 

2、可以自动附加jsessionid参数进行url重写,这样的话,即使客户端浏览器禁止使用cookie,仍然可以实现会话跟踪。不过jsessionid只会在第一次连接的时候出现在地址栏,之后再连接的话,如果客户端浏览器支持cookie,则地址栏后面的jsessionid会被自动去掉。

 

3、利用OGNL表达式对参数信息进行url编码,这样的话,即使是非标准西文字符(例如中文)也会经处理后再放到地址栏,避免因字符问题导致请求出错。例如<s:param name="name" value="'张三'"></s:param>,value属性值"'张三'"如果写成"张三"或者"%{张三}",是得不到正确的请求地址的。虽然使用单引号也可以,不过因为struts2规定param的value属性值是OGNL表达式,所以使用"%{'张三'}"更规范。%{}能保证{}内的值强制转为OGNL表达式。

 

4、直接使用<s:url />标签可以获得当前地址,而使用includeParams属性时会带上原来的请求参数,默认值为get,还有post和all。例如很多大型网站的链接地址总是要带上userid之类的信息。(jstl中的<c:url>标准标签也有<s:url>标签的后两个作用)

 

国际化
1、在struts.xml文件中利用常量<constant name="struts.custom.i18n.resources" value="cn.itcast.struts2demo.web.resource.message,cn.itcast.struts2demo.web.resource.resource"/>配置资源文件(cn.itcast.struts2demo.web.resource是包名,后面的message或resource是properities文件名,也包括了resource_zh_CN.properties这样的文件),可以配置多个,用逗号(,)分割,如果页面中没有特别指定,默认采用最后一个,如果默认包中没有对应信息,则在所有资源包内一一查找。

 

2、如果在资源文件中没有找到某个key对应信息内容,将直接输出该key。资源文件里的key值也可以用{0}{1}这样的表达式传递参数动态生成。

 

3、如果有以ActionClassName为基准名称的资源文件,并让Action继承ActionSupport类,直接访问jsp页面时无法获取ActionClassName资源文件中的信息,但经过该Action访问时则可以获得--拦截器的功效,而且这是strust2读取资源文件的最高优先级。

 

4、在Action类的源代码中用可以用ActionSupport类的getText方法获取国际化资源信息。

 

5、用<s:i18n>标签来明确指明从哪个资源包中获取信息。
<s:i18n name="cn.itcast.struts2demo.web.resource.message">
 <s:property value="getText('info.i18ntest','phebe')"/> |
 <s:debug />
</s:i18n>
<s:property value="getText('info.i18ntest')"/>


6、i18n拦截器取request_locale(源码里硬编码声明的变量)的请求参数表示的locale并存储进Session,还取Session中的Locale填充ActionContext的Locale。可以利用request_locale实现用户自行选择国际化操作界面的信息。

原创粉丝点击