您的位置:首页 > 产品设计 > UI/UE

读《JavaServer Faces 核心编程(第3版)》一书的记录—— 第 2 章 受管 bean——案例 numberquiz

2013-01-24 10:35 232 查看
All +All -
numberquiz

+
-使用案例

+
-运行案例

在NetBeans中运行

+
-自动打开首页面

提供一组序列(由5个数字元素组成)
+
-提供一个输入文本框

以供用户填写序列的第6个元素

+
-提供一个按钮

以供用户提交答案

+
-提供一个输出文本组件(在Your current score is后)

以供显示得分数

+
-操作描述

在文本框中输入用户猜想的序列的下一个元素,然后点击按钮
+
-页面内容变化

序列更新
文本框内容清空
如果答案正确,得分数加一分
如果答案不正确,得分数不变

+
-阅读案例(重点记录新知识点)

+
-第一层面:视图

+
-作用

与用户直接交互

+
-内容

+
-视图index.xhtml

HTML 标签
+
-JSF html 标签

+
-h:outputFormat

输出参数化的文本
+
-特性value

值:"#{msgs.currentScore}"

指定该组件的显示文本,例如“Your current score is {0}.”

该处指定的文本中存在“可变部分”

把这些“可变部分”使用“占位符”

占位符以{0},{1},{2}等编号

+
-子标签f:param

参见 JSF core标签一节

+
-JSF core 标签

+
-f:param

为父组件上的消息中的占位符指定值,使用特性value
+
-特性value

值:"#{quizBean.score}"
指定父组件上显示文本中的占位符的值

+
-第二层面:控制

+
-一,视图控制层

+
-作用

上接受视图的调用
下对数据管理层的搭配

+
-内容

+
-视图后台bean(上下文和相关性注入CDI bean)

+
-
什么是CDI bean(以类QuizBean为例)?

该类必须符合JavaBean规范
+
-使用标注@Named来声明该类为CDI bean

默认声明一个bean对象,其名称为:该类名称的首字母转为小写后的字符串
可以在标注后的圆括号内写入对象名称字符串,例如:@Named("quiz")
可以对标注的特性name赋值,例如:@Named(name="quiz")

+
-使用标注@SessionScoped来声明该bean的有效域

此时,该类必须实现接口Serializable

必须包含文件WEB-INF/beans.xml以激活CDI bean 处理机制

+
-CDI bean与JSF 管理bean的区别(以类QuizBean为例)?

+
-CDI bean

@Named来自于程序包:javax.inject.Named
@SessionScoped来自于程序包:javax.enterprise.context
用于Java EE 6应用服务器中

+
-管理bean

@ManagedBean
@SessionScoped来自于程序包:javax.faces.bean
仅用于servlet运行器(如:Tomcat)中

+
-bean的使用

上述两种bean,在页面文件中的使用,完全相同
可以统称为“页面后台bean”

+
-回头看第一章中的案例

其中的“页面后台bean”,称为“后台管理bean”
那里只是在“CDI bean”概念没有引入之前,暂时保留JSF2.0之前版本的称谓而已
在此后的章节中,可以将这些bean统一称为“页面后台bean”或者“视图后台bean”

+
-页面index.xhtml中使用的CDI bean

+
-对象名称:quizBean

对应的Java Bean:GuizBean
+
-用例

#{quizBean.score}
#{quizBean.current.sequence}
#{quizBean.current.sequence}
#{quizBean.answer}

+
-消息包

+
-制定消息包

+
-将消息字符串收集到一个文件中

文件名称:可以选择任意
文件后缀:必须是properties
+
-文件内容:采用键与值的等式来描述

例如:username=User Name:
一个文件格式,可以查看java.util.Properties 类load方法的说明

+
-消息包文件保存的位置

可以选择任意目录路径
该案例保存在:src/java/com/corejsf/messages.properties

+
-声明消息包

+
-声明为局部(某个页面)资源包

+
-将f:loadBundle元素添加到JSF页面中

+
-用例

<f:loadBundle basename="com.corejsf.messages" var="msgs" />


+
-特性

+
-basename="com.corejsf.messages"

这里的“基本名称”,使用类全路径的形式
实际上,该属性文件是由类加载器加载的

+
-var="msgs"

它是该属性文件的映射变量
+
-使用

使用JSF表达式语言符号#{...}
+
-使用映射变量来访问文件中的键,返回该键的值

例如:#{msgs.title}
返回值:NumberQuiz

+
-声明为全局资源包(本案例使用的)

+
-在应用程序的WEB-INF目录中添加一个配置文件faces-config.xml

+
-用例

<application>

<resource-bundle>

<base-name>com.corejsf.messages</base-name>

<var>msgs</var>

</resource-bundle>

</application>

+
-使用

参考“使用局部资源包”中的相关内容

+
-消息包的作用

便于保持消息的一致性
便于在其他地区运行应用程序时进行本地化处理

+
-消息包的使用

+
-在index.xhtml页面文件中

#{msgs.title}
#{msgs.heading}
#{msgs.currentScore}
#{msgs.next}

+
-二,数据控制层

+
-作用

上接受视图管理层的调配处理
下对数据对象的操作

+
-内容

+
-数据控制器

该案例由视图后台bean quizBean代替
+
-在其中直接管理“数据对象”

这里的数据对象是类ProblemBean,在实际应用程序中,

大多都将此类信息存储在数据库中

+
-数据控制器的使用

直接构造“数据对象”,并操作这些对象

+
-第三层面:模型

+
-一,数据对象层

+
-作用

上接受数据管理层的调配处理
下对数据进行操作

+
-内容

+
-数据对象

这里是类ProblemBean的实例对象
该类对象负责对数据进行操作
+
-数据对象的使用

通过“数据控制器”实现对数据的存取

+
-二,数据表层

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