0hi猿团提供了移动跨平台开发视频,包括html5,apicloud appcan,dcloud,具体请看http://www.9y.cm
用户注册案例的实验——国际化
步骤:
1.使用<html:errors>标签可以获取存储在request域中的错误信息并进行显示,根据程序报告的异常信息,引入struts国际化资源包的配置和创建国际化资源文件,运行正常。
2. 在国际化资源文件中设置错误提示信息,并将FormBean.validate方法中的ActionMessage对象关联的错误提示信息改为从资源文件中读取。
3.实验分析struts按什么规则判断用户的Locale信息和如何根据Locale信息来获取资源消息。
4.使用<bean:message>将页面的标题栏文字和提交按钮国际化。
5.在struts中如何配置多个资源包,<bean:message>可通过bundle属性来指明使用哪个资源包。
6.<html:link>和<html:submit>等标签的titleKey属性的国际化功能,<html:submit>生成的按钮表面的文字如何实现国际化。
第1步:如果struts-config.xml文件中没有配置Message-resource,那么,<html:errors> 标签会报告错误,讲课时可以故意在struts-config.xml文件中不配置MessageResource,等到<html:errors>标签出现错误时,让大家分析。接着配置和创建MyApp,MyApp_zh_CN,MyApp_en等三个资源文件,这里要解释资源文件运行时的存放位置和在eclipse中为什么是放置在src目录或其子目录中的道理。
第2步:有学员不太明白我为什么将资源文件中的key设置为error.username或error.password2等形式,这只是一种良好的明明习惯,让别人一眼就能看出这代表的是一条错误消息。
第3步:先看到中文效果,然后将浏览器设置为英文语言,问看到什么效果,分析为什么是中文,因为struts取Locale都是从session中取的,如果session中没有Locale才根据浏览器来获得Locale,并将这个Locale保存在session中了,以后struts判断用户的Locale就是从这个Session中获取了 ,这主要是便于用户可以手工改语言,例如,struts-mailreader的例子。要想看到英文的效果,再启动一个浏览器就可以了。接着删除MyApp_en问效果,大家都说还是英文的,因为默认资源包是MyApp,结果却是中文的,因为找不到某个Locale对应的资源文件时,优先去找操作系统相关的资源文件,最后才是找默认资源包。为了保证最后一步的实验,必须叫MyApp_zh_CN,不能是MyApp_zh或MyApp_zh-CN。
第4步: <bean:message>标签用于取资源包中的内容进行显示,为了支持国际化开发,JSP页面显示的信息应该通过<bean:message>标签从资源文件中提取,<bean:message>的信息也是从MessageResource对象中读取的。
第5步:有时候需要将错误信息与提示信息分开存放,即把错误信息和普通文本信息分散在不同的资源文件中。把提示信息放在一个单独的info资源包中,不放在缺省资源包中(这里提前将错误消息放在缺省资源包中,便于以后讲解业务校验错误时如何实现参数的国际化),这时候引出struts框架根据<messageresource>标签的信息生成MessageResource对象,以及将MessageResource保存在appliaction域中的思想。ActionServlet在起动时就创建该MessageResource对象,并将其存储进application中,在处理每个请求时,又将其存储进request对象中。
将前面查看FormBean存储情况的代码修改一下,即变成下面代码打印出application作用域中的各个属性,从而分析了多个国际化资源包如何存储:
<c:forEach items="${applicationScope}" var="oneAttr">
${oneAttr.key }:${oneAttr.value }<br>
</c:forEach>
如果要访问其他资源包中的消息,需要使用<bean:message>标签的bundle属性来指明访问哪个资源包,<html:errors>标签中也有bundle属性。
用户注册案例的实验 ——<html:errors>标签详讲
步骤:
1. 在ActionErrors中再增加一个没有填写用户名的错误,这样在ActionErrors中有了两条错误消息,在jsp页面中可以使用<html:errors>标签的property属性来分别显示这两条消息。
2. 参看struts-mailreader例子程序中的资源文件,设置errors.header、errors.footer、errors.prefix、errors.suffix等消息,查看<html:errors>标签显示这些消息的效果。
3.参看下页的示意图,分析和说明ActionErrors中的每个key可以对应多个ActionMessage对象,并演示一下其运行效果。
问题2;ActionErrors和ActionMessages内部存储的同一字段名可以对应多条ActionMessage,例如:
errors.addMessage("age",new ActionMessage("error.age"));
errors.addMessage("age",new ActionMessage("error.old"));
有一特殊字段名ActionMessages.GLOBAL_MESSAGE,代表全局错误信息。