JSF2.0简介:页面模版化(系列之四)

JSF已经出了很多年了,自从提出就带来了一些新的思想,但是直到JSF2.0的推出,才将许多当初的想法真正体现出来,并真正为广大开发者提供了一条便捷的开发道路。是时候关注JSF了,如果说以前他还是一个学院派的东西,现在他已经吸收了众多实践派的精华,我的这些例子中就以便捷开发和简介为主导。
插一段闲话:本系列是JSF2.0的入门及例子,其中的例子并未精心选择,只是用来说明JSF2.0的几个重要且便捷的特性。如若想了解更多的内容可以去官网查找,或者在本网站的JSF组中一起探讨。也非常感谢大家的支持。

上一篇我们已经接触了新的页面表现方式facelets,并实现了一个复合组件的例子。本篇继续沿用上一篇的例子,只是修改一下页面,来介绍可以与Tapestry相媲美的页面模版化定义。

我们还是一起来看例子,还记得上一篇中的文件吗?echo.xhtml,/resources/echo/echoInputText.xhtml,echoOut.xhtml。我们就在此基础上介绍页面模版化。

一、 创建一个模版
首先定义模版文件/templates/echoTemplate.xhtml,文件内容如下:

echoTemplate.xhtml
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head>
<title>#{title}</title>
<meta http-equiv="keywords" content="jsf2.0,组件,ajax" />
<meta http-equiv="description" content="测试简单的复合组件." />
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
</h:head>
<body>
<div id="header" style="padding:100px 0 20px 100px;font-size:22px;font-weight:bold;border-bottom:solid 1px red">
这个应声器的作者是:#{echo.encoder.author}。
</div>
<div id="input">
<ui:insert name="content"/>
</div>
<h:panelGroup id="after">
<div style="padding:20px 0 0 100px">
响应:<h:outputText id="echo" value="#{echo.outText}" escape="false"></h:outputText>
</div>
</h:panelGroup>
</body>
</html>

将此文件与系列之三中echo.xhtml比较,有两处不同:<title>#{title}</title>和<ui:insert name="content"/>。此两处都会在模版的实现页中定义。

二、定义一个实现页:

echointmp.xhtml:
<?xml version="1.0" encoding="gb2312"?>
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
template="/templates/echoTemplate.xhtml">
<ui:param name="title" value="测试简单的模版" />
<ui:define name="content">
<ui:include src="/sections/content.xhtml"/>
</ui:define>
</ui:composition>

对照看看echointmp.xhtml与模版页echoTemplate.xhtml。其中#{title}在echointmp.xhtml页中定义<ui:param name="title" value="测试简单的模版" />。

<ui:define name="content">
<ui:include src="/sections/content.xhtml"/>
</ui:define>
这个标签用来定义模版页中预留的<ui:insert name="content"/>,其中ui:define标签与ui:insert标签是相对应的。这样在echointmp.xhtml中就会使用ui:define中的内容替换ui:insert中的内容,由name属性来确定匹配。
ui:insert标签还可以定义默认表现,就是当在定义页面中没有定义匹配的页面时,默认渲染的组件。示例如下:
<ui:insert name="content">
此模版未定义。
</ui:insert>

其中<ui:include src="/sections/content.xhtml"/>语法与jsp:include类似,就是引入content.xhtml页。

content.xhtml:

<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:echo="http://java.sun.com/jsf/composite/echo"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head>
<title>模版内容</title>
</h:head>
<body>
<ui:component>
<h:form id="form" style="padding:20px 0 20px 100px">
<echo:echoInputText echo="#{echo}"></echo:echoInputText>
<div style="padding-left:50px">
<h:commandButton id="post" style="padding:3px;width:100px;" value="提交响应"/>
</div>
</h:form>
</ui:component>
</body>
</html>

模版化的例子完成,在浏览器中输入:http://localhost:8080/TestJsf2.0/echointmp.xhtml看看访问效果。

二、 关于几个例子的几点说明

关于中文的问题:在任何java编程中,如果采用中文环境,都免不了涉及到中文问题,JSF2.0中的中文问题很容易解决,就是在组件等页面的开头加入以下说明
<?xml version="1.0" encoding="gb2312"?>
这样页面中就可以采用中文了。另外在主页面中(例如本例中的模版页和上例中的echo.xhtml),需要在meta标签中指定编码格式,见例子(本例都采用UTF-8编码),最好不要在页头加入上行,主要是由于如ie6等浏览器对xhtml的格式支持不是特别好,如果页头有这个说明,有些css模式在这些浏览器中无法正常显示。中文乱码问题一直是各类编程中令人头疼的问题,我们有时间可以单独用篇幅来讨论。

关于JSF2.0组件,JSF2.0提供两种标签来定义组件,分别为ui:composite和ui:component 。他们可以起到一样的效果,当定义复合组件或者是包含于ui:include标签中的内容时,最好都采用组件标签包含,例如本例中的content.xhtml,即使去掉ui:component标签也能正常显示,不过看看两种方式生成的源代码就知道有什么不同了。

在例子中还有一个小趣味,就是当你按“提交响应”按钮时,有什么变化,导航页变了吧。此是由于此按钮中有action="echo",其中指向的是echo.xhtml,去掉此说明就是导航到本页了。


JSF2.0新的组件模型的简介例子写完了,希望能给大家一些帮助。更多的交流可以到本网站的JSF组中交流。从下一篇起,我们再看看JSF2.0中引入的Ajax模型,看看他对我们的Web2.0开发带来了哪些便捷体验。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这是2个压缩包中的第二个,请一并将第一个下载后,随便解压其中一个即可。 如果只希望下载其中一部分即可阅读,可下载另一个pdf: http://download.csdn.net/detail/oqqsun12345678/5215337 内容简介 出版日期: 2012年1月1日 《JavaServer Faces 2.0完全参考手册》针对javaserver faces(jsf)2.0中的变进行了全面的修订与更新,涵盖了javeee的官方标准web开发架构的每个方面。在这本权威著作中,sun microsystems公司中的jsf合作规范领导者展示了如何创建动态的、跨浏览器的web应用程序,由于保留了较高质量的代码和可扩展性,这些应用程序可以给用户带来极为优秀的体验。 《JavaServer Faces 2.0完全参考手册》提供了一个综合的示例应用程序,可以将其用作您自己的jsf应用程序的模型。该示例应用程序的代码可以从网上下载。《JavaServer Faces 2.0完全参考手册》对所有jsf功能都进行了解释,包括请求处理生命周期、托管bean、页面导航、组件开发、ajax、验证器、国际和安全。贯穿全书的专家组意见提供了关于jsf设计的内部信息。 推荐编辑 《JavaServer Faces 2.0完全参考手册》主要内容:搭建开发环境并构建JSF应用程序。理解JSF请求处理生命周期。使用Facelets视图声明语言、托管bean和JSF表达式语言(EL)。按照JSF导航模型声明一个页面,包括新的“隐式导航”功能。使用用户界面组件模型和JSF事件模型,包括支持可添加书签的页面以及POST、REDIRECT、GET模式。使用为模型数据验证设立的新的JSR-303bean验证标准。创建可以使用Ajax的定制用户界面组件。使用定制的非用户界面组件来扩展JSF。管理安全、可访问性、国际和本地。学会使用Liferay的JSF团队领导开发的JSF和Portlet,Liferay是处于领导地位的JavaPortal开发商。 全面介绍JSF2.0、详述如何使用Ajax,以及按照JSF2.0、的方式构建组件、快速理解众多可以直接运行的代码示例。 作者 作者:(美国)伯恩斯 (Ed Burns) (美国)沙尔克 (Chris Schalk) (美国)格里芬 (Neil Griffin) 译者:陶克 熊淑华 伯恩斯,Ed Burns是Sun Microsystems公司的高级主管工程师,此外还是JavaServer Faces共同规范的领导者。他与其他人合著了JavaServer Faces:The Complete Reference一书,并且是Secrets of the Rock Star Programmers一书的作者。 沙尔克,Chris Schalk是developer advocate,致力于提升Google的API和技术。他当前在国际Web开发社区工作,主要研究新的Google App Engine和Open Social API。 格里芬,Neil Griffin是Liferay Portal的委员以及JSF开发团队领导者,并且是Portlet Faces项目的合作创始人。 目录 第I部分 javaserver faces框架 第1章 javaserver faces简介 1.1 什么是javaserver faces 1.2 javaserver faces的历史 1.2.1 公共网关接口 1.2.2 servletapi 1.2.3 java服务器页面 1.2.4 apachestruts 1.2.5 spring框架和springmvc 1.2.6 javaserverfaces的诞生 1.3 javaserver faces设计目标 1.4 jsf应用程序架构 1.4.1 jsf请求处理生命周期 1.4.2 jsf导航模型 第2章 构建一个简单的javaserver faces应用程序 2.1 应用程序概述 2.1.1 jsfreg应用程序文件 2.1.2 jsf软件栈 2.1.3 装配jsfreg应用程序 2.1.4 配置文件 2.1.5 facelets页面 2.2 构建和运行应用程序 2.3 应用程序关键部分 回顾 第3章 javaserver faces请求处理生命周期 3.1 jsf请求处理生命周期概述 3.1.1 请求处理生命周期的功能 3.1.2 与其他web技术的区别 3.1.3 服务器端视图的自动管理与同步 3.1.4 请求处理生命周期的各阶段 3.2 观察请求处理生命周期 3.3 与请求处理生命周期有关的高级主题 3.3.1 使用immediate属性 3.3.2 阶段侦听器 3.3.3 异常处理程序 3.4 关键的生命周期概念 第4章 facelets视图声明语言 4.1 jsf中使用模板的威力 4.2 jsp与facelets的异同 4.3 使用facelets执行模板 4.4 facelets模板标签使用指南 4.4.1 ui:composition 4.4.2 ui:decorate 4.4.3 ui:define 4.4.4 ui:insert 4.4.5 ui:include 4.4.6 ui:param 4.5 facelets非模板标签使用指南 4.5.1 ui:component 4.5.2 ui:fragment 4.5.3 ui:remove 4.5.4 ui:debug 第5章 托管bean与JSF表达式语言 5.1 托管bean概念 5.1.1 简单托管bean示例 5.1.2 初始托管bean属性 5.1.3 把List和Map声明为托管bean 5.1.4 托管bean的相互依赖 5.1.5 使用EL设置托管属性 5.2 控制托管bean生命周期 5.3 JSF表达式语言 5.3.1 JSFl.1 与JSFl.2 之间表达式语言的关键区别 5.3.2 统一EL概念 5.3.3 值表达式 5.3.4 表达式操作符 5.3.5 方法表达式 5.4 托管bean的Web应用程序开发细节 5.4.1 采用编程方式访问托管bean 5.4.2 使用托管bean作为JSF页面的支撑bean 第6章 导航模型 6.1 使用隐式导航 6.2 JSF导航系统概述 6.2.1 回顾MVC-控制器 6.2.2 Navigation HandleI-幕后主管 6.2.3 Faces动作方法说明 6.3 构建导航规则 6.3.1 静态导航示例 6.3.2 动态导航示例 6.4 更复杂的导航示例 6.4.1 使用通配符 6.4.2 使用条件导航 6.4.3 使用重定向 6.4.4 视图参数的XML配置 6.4.5 在Servlet错误页上使用JSF组件 第7章 用户界面组件模型 7.1 什么是用户界面组件 7.1.1 基于组件的Web开发的兴起 7.1.2 Java Server Faces用户界面组件的目标 7.2 JSF用户界面组件架构介绍 7.2.1 用户界面组件树(视图) 7.2.2 用户界面组件和相关的“活动部分 7.3 组件资源 7.4 用户界面组件和Facelets 7.4.1 用编程方式访问用户界面组件 7.4.2 在JSF视图中绑定用户界面组件的有用建议 第8章 数据转换与数据验证 8.1 验证和转换的示例 8.2 转换和验证揭秘 8.3 Faces转换器系统 8.3.1 Date Time Converter 8.3.2 Number Converter 8.3.3 关联转换器与UI Component实例 8.3.4 转换器的生命周期 8.3.5 定制转换器 8.4 Faces验证系统 8.4.1 Long Range Validator 8.4.2 Double Range Validator 8.4.3 Length Validator 8.4.4 必需的工具Required Validator 8.4.5 Reg Ex Validator 8.4.6 Bean Validator …… 第9章 jsf事件模型 第II部分 扩展javaserver faces 第10章 应用jsf:虚拟教练应用程序简介 第11章 构建定制用户界面组件 第12章 jsf与ajax 第13章 构建非用户界面定制组件 第14章 保护javaserver faces应用程序 第III部分 javaserver faces工具与库 第15章 配置javaserver faces应用程序 第16章 标准的jsf组件库 附录jsf portlet

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值