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标签一节
- + -h:outputFormat
- + -JSF core 标签
- + -f:param
- 为父组件上的消息中的占位符指定值,使用特性value
- + -特性value
- 值:"#{quizBean.score}"
- 指定父组件上显示文本中的占位符的值
- + -f:param
- + -视图index.xhtml
- + -作用
- + -第二层面:控制
- + -一,视图控制层
- + -作用
- 上接受视图的调用
- 下对数据管理层的搭配
- + -内容
- + -视图后台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
- + -basename="com.corejsf.messages"
- + -用例
- + -将f:loadBundle元素添加到JSF页面中
- + -声明为全局资源包(本案例使用的)
- + -在应用程序的WEB-INF目录中添加一个配置文件faces-config.xml
- + -用例
-
<application>
<resource-bundle>
<base-name>com.corejsf.messages</base-name>
<var>msgs</var>
</resource-bundle>
</application>
-
- + -使用
- 参考“使用局部资源包”中的相关内容
- + -用例
- + -在应用程序的WEB-INF目录中添加一个配置文件faces-config.xml
- + -声明为局部(某个页面)资源包
- + -将消息字符串收集到一个文件中
- + -消息包的作用
- 便于保持消息的一致性
- 便于在其他地区运行应用程序时进行本地化处理
- + -消息包的使用
- + -在index.xhtml页面文件中
- #{msgs.title}
- #{msgs.heading}
- #{msgs.currentScore}
- #{msgs.next}
- + -在index.xhtml页面文件中
- + -制定消息包
- + -视图后台bean(上下文和相关性注入CDI bean)
- + -作用
- + -二,数据控制层
- + -作用
- 上接受视图管理层的调配处理
- 下对数据对象的操作
- + -内容
- + -数据控制器
- 该案例由视图后台bean quizBean代替
- + -在其中直接管理“数据对象”
-
这里的数据对象是类ProblemBean,在实际应用程序中,
大多都将此类信息存储在数据库中
-
- + -数据控制器的使用
- 直接构造“数据对象”,并操作这些对象
- + -数据控制器
- + -作用
- + -一,视图控制层
- + -第三层面:模型
- + -一,数据对象层
- + -作用
- 上接受数据管理层的调配处理
- 下对数据进行操作
- + -内容
- + -数据对象
- 这里是类ProblemBean的实例对象
- 该类对象负责对数据进行操作
- + -数据对象的使用
- 通过“数据控制器”实现对数据的存取
- + -数据对象
- + -作用
- + -二,数据表层
- 无
- + -一,数据对象层
- + -第一层面:视图