flags
- + -第一步:创建案例
- 使用随书源码在NetBeans中创建项目
- + -第二步:运行案例
- 在IDE中运行该案例
- + -第三步:阅读案例结构
- + -Web
- + -页面文件
- index.xhtml
- thankYou.xhtml
- + -资源文件夹resources
- + -子文件夹images
- 图像文件de_flag.gif
- 图像文件en_flag.gif
- + -子文件夹images
- + -页面文件
- + -源包
- + -java包com.corejsf
- LocaleChanger.java
- UserBean.java
- messages.properties
- messages_de.properties
- + -java包com.corejsf
- + -库
- JDK 1.7
- GlassFish Server 3.1.2
- + -配置文件
- beans.xml
- faces-config.xml
- web.xml
- + -Web
- + -第四步:阅读案例新功能
- + -第一层面:视图
- + -页面文件
- + -index.xhtml
- *标题显示内容:Using Command Linke
- *上部显示:德国旗帜和英国旗帜图案的“链接”组件
- *当单击德国旗帜图案的链接时,页面显示的文本,由英文改变为德文
- *当单击英国旗帜图案的链接时,页面显示的文本,由德文改变为英文
- + -thankYou.xhtml
- 与案例personalData相同
- + -index.xhtml
- + -页面文件
- + -第二层面:控制
- + -页面控制器
- + -UserBean
- + -*属性
- 保存用户名、密码和自我介绍信息的3个String类型的属性
- + -*方法
- 上述3个属性的读写方法
- + -*属性
- + -LocaleChanger
- *germanAction()
- *englishAction()
- + -UserBean
- + -数据控制器
- UserBean
- + -页面控制器
- + -第三层面:模型
- UserBean
- + -第四层面:配置
- 无新内容
- + -第一层面:视图
- + -第五步:详解新技术--使用命名链接组件
- + -第一层面:视图
- + -视图文件
- + -index.xhtml
- + -*关于德国和英国旗帜的图案
- + -1,旗帜图案的文件在哪里?
- 在web根下的resources目录下(该目录是JSF2.0对页面资源的引用规定的一个固定目录)的子目录images内
- + -文件
- en_flag.gif(是英国国旗图像文件)
- de_flag.gif(是德国国旗图像文件)
- + -2,在哪个组件上应用了这些图案文件?
- 在组件h:commandLink的子组件h:graphicImage中应用了图像文件
- *用组件h:graphicImage,来引入图像文件,在该组件出现的地方
- *用组件h:graphicImage的特性library,来指定图像文件所在(在固定文件夹resources下)的能够文件夹,例如:library="images"
- *用组件library的特性name,来指定图像文件的名称,例如:name="en_flag.gif"
- 在组件h:commandLink的子组件h:graphicImage中应用了图像文件
- + -1,旗帜图案的文件在哪里?
- + -*关于德国和英国旗帜图案上的链接
- + -1,点击旗帜图案后页面上如何能够显示对应国家的语言文字呢?
- (1)旗帜图案所在的组件,是个链接组件h:commandLink
- (2)链接组件上的动作事件,由该组件的特性action指定的方法来处理
- *这里指定的是一个JSF表达式
- #{localeChanger.germanAction}
- #{localeChanger.englishAction}
- *表达式是页面后台控制器LocaleChanger实例对象的一个方法
- germanAction()
- englishAction()
- *这里指定的是一个JSF表达式
- (3)处理事件的方法都干了哪些事儿?
- *这两个方法返回的都是null,因为这里不需要导航到其它也没去
- *方法中设置了本地语言为链接所代表的那个国家的语言
- 英文为:Locale.ENGLISH
- 德文为:Locale.GERMAN
- 2,具体后台管理器的功能,参见类LocaleChanger
- + -1,点击旗帜图案后页面上如何能够显示对应国家的语言文字呢?
- + -*关于德国和英国旗帜的图案
- + -thankYou.xhtml
- 无新内容
- + -index.xhtml
- + -视图资源
- JSF2.0资源规定目录:resource
- 存放资源文件的子目录:images
- + -图像文件
- 德国国旗图像文件de_flag.gif
- 英国国旗图像文件en_flag.gif
- + -视图文件
- + -第二层面:控制
- + -页面控制器
- + -UserBean
- 无新内容
- + -LocaleChanger
- + -方法
- 处理设置应用场所为英国的方法:englishAction;返回null
- 处理设置应用场所为德国的方法:germanAction;返回null
- + -方法
- + -UserBean
- + -数据控制器
- + -UserBean
- 无新内容
- + -UserBean
- + -页面控制器
- + -第三层面:模型
- + -UserBean
- 无新内容
- + -UserBean
- + -第四层面:配置
- 无新内容
- + -第五层面:国际化
- + -英文消息文件
- com.corejsf.messages.properties
- + -德文消息文件
- com.corejsf.messages_de.properties
- + -不同语言的消息文件的命名
-
在英文消息文件的基础上,添加下划线“_”和类Locale中对国家声明的常量字符,
例如:对英国的消息文件如果命名为messages
那么,对德国的消息文件必须命名为messages_de
对简体中文的消息文件必须命名为messages_zh_CN
对台湾中文的消息文件必须命名为messages_zh_TW
-
- 注意:这里不讨论太多国际化问题,它超出了该案例的主要问题
- + -英文消息文件
- + -第一层面:视图
- + -第六步:应用JSF API
-
+ -1,找出英国英文的“本地对象”
- Locale.ENGLISH
+ -2,找出德国德文的“本地对象”
- Locale.GERMAN
+ -3,找的Faces的上下文对象
- FacesContext context = FacesContext.getCurrentInstance();
+ -4,从Faces上下文对象中,找出“用户界面视图的根组件”,然后在根视图中设置“本地对象”
- context.getViewRoot().setLocale(Locale.ENGLISH);
5,设置英国的本地对象的代码可以如下所示:
FacesContext context = FacesContext.getCurrentInstance();
UIViewRoot viewRoot=context.getViewRoot();
viewRoot.setLocale(Locale.ENGLISH);6,设置德国的本地对象的代码可以如下所示:
FacesContext context = FacesContext.getCurrentInstance();
UIViewRoot viewRoot=context.getViewRoot();
viewRoot.setLocale(Locale.GERMAN);
-