您的位置:首页 > Web前端 > JavaScript

读《JavaServer Faces 核心编程(第3版)》一书的记录—— 第 4 章 标准 JSF 标签——案例 flags

2013-02-04 22:30 483 查看
All +All -
flags

+
-第一步:创建案例

使用随书源码在NetBeans中创建项目

+
-第二步:运行案例

在IDE中运行该案例

+
-第三步:阅读案例结构

+
-Web

+
-页面文件

index.xhtml
thankYou.xhtml

+
-资源文件夹resources

+
-子文件夹images

图像文件de_flag.gif
图像文件en_flag.gif

+
-源包

+
-java包com.corejsf

LocaleChanger.java
UserBean.java
messages.properties
messages_de.properties

+
-库

JDK 1.7
GlassFish Server 3.1.2

+
-配置文件

beans.xml
faces-config.xml
web.xml

+
-第四步:阅读案例新功能

+
-第一层面:视图

+
-页面文件

+
-index.xhtml

*标题显示内容:Using Command Linke
*上部显示:德国旗帜和英国旗帜图案的“链接”组件
*当单击德国旗帜图案的链接时,页面显示的文本,由英文改变为德文
*当单击英国旗帜图案的链接时,页面显示的文本,由德文改变为英文

+
-thankYou.xhtml

与案例personalData相同

+
-第二层面:控制

+
-页面控制器

+
-UserBean

+
-*属性

保存用户名、密码和自我介绍信息的3个String类型的属性

+
-*方法

上述3个属性的读写方法

+
-LocaleChanger

*germanAction()
*englishAction()

+
-数据控制器

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"

+
-*关于德国和英国旗帜图案上的链接

+
-1,点击旗帜图案后页面上如何能够显示对应国家的语言文字呢?

(1)旗帜图案所在的组件,是个链接组件h:commandLink
(2)链接组件上的动作事件,由该组件的特性action指定的方法来处理

*这里指定的是一个JSF表达式

#{localeChanger.germanAction}
#{localeChanger.englishAction}

*表达式是页面后台控制器LocaleChanger实例对象的一个方法

germanAction()
englishAction()

(3)处理事件的方法都干了哪些事儿?

*这两个方法返回的都是null,因为这里不需要导航到其它也没去
*方法中设置了本地语言为链接所代表的那个国家的语言

英文为:Locale.ENGLISH
德文为:Locale.GERMAN

2,具体后台管理器的功能,参见类LocaleChanger

+
-thankYou.xhtml

无新内容

+
-视图资源

JSF2.0资源规定目录:resource
存放资源文件的子目录:images
+
-图像文件

德国国旗图像文件de_flag.gif
英国国旗图像文件en_flag.gif

+
-第二层面:控制

+
-页面控制器

+
-UserBean

无新内容

+
-LocaleChanger

+
-方法

处理设置应用场所为英国的方法:englishAction;返回null
处理设置应用场所为德国的方法:germanAction;返回null

+
-数据控制器

+
-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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐