最初是作为对JSF 1.x中基于JSP的视图处理程序的替代而开发的。在JSF2.0中,Facelets作为JSF的默认视图技术来替换JSP。除了是一种更好的视图处理程序外,Facelets还支持大量用于模板化和其他目的的标签。
命名空间:
xmlns:ui="http://java.sun.com/jsf/facelets" |
Facelets 标签
可将Facelets标签分为如下几个类型:
-
包含来自其他XHTML页面的内容(ui:include)
-
利用模板生成页面(ui:compostion、ui:decorate、u:insert、ui:define、ui:param)
-
无须编写Java代码创建自定义组件(ui:component、ui:fragment)
-
其他实用工具(ui:debug、ui:remove、ui:repeat)
标签 |
说明 |
<ui:include> |
包含来自另一个XHTML文件的内容 |
<ui:compostion> |
如果不使用template属性,组合是一连串可插入到其他地方的元素。组合可以具有可变部分(使用ui:insert子标签指定)。 如果使用template属性,则加载该模板。该标签的子标签确定模板的可变部分。模板内容替换该标签。 |
<ui:decorate> |
如果不使用template属性,ui:decorate指定可以插入部分的页面。使用ui:insert子标签指定变量部分。 如果使用template属性,则加载该模板。该标签的子标签确定了模板的可变部分。 |
<ui:define> |
定义了使用匹配ui:insert插入到模板中的内容。 |
<ui:insert> |
将内容插入到模板中。在加载了该模板的标签中定义该内容。 |
<ui:param> |
指定一个传入到所含文件或者模板的参数。 |
<ui:component> |
该标签类似于ui:composition,唯一不同的是它创建了一个添加到组件树的组件。 |
<ui:fragment> |
类似于ui:decorate,不同之处在于它创建了一个添加到组件树的组件。 |
<ui:debug> |
使用户通过键盘快捷键显示调试窗口,其中显示了当前页面的组件层次结果和应用程序作用域内的变量。 |
<ui:remove> |
JSF移除ui:remove标签中的所有内容。 |
<ui:repeat> |
迭代列表、数组、结果集合或单个对象。 |
<ui:include>
<ui:include>标签用来在文件中包含另外一个Facelets文件 , 它只需要指定被包含文件的位置。
它可以包含任何拥有 ui:component 或 ui:composition等标签或是简单的XHTML 或XML 代码片断的文件。
Attributes
属性名称 |
必需 |
描述 |
src |
是 |
属性的值可以是简单的值或是 EL 表达式,用来指定被包含的 Faclets 文件的位置 , 可以是相对路径也可以是绝对路径。 |
可用子元素
<ui:param>
设置EL变量,在被包含的Facelets文件中使用。
<ui:composition>
<ui:composition> 标签是一个模板标签,它将一些可以被其它Facelets 页面所包含的内容封装起来。
标签以外的内容将被编译器忽略
Attributes
属性名称 |
必需 |
描述 |
template |
否 |
将在标签开始和结束之间显示的模板文件所在的路径 |
<ui:composition>指定使用哪个模版文件,然后通过 <ui:define> 对模版文件中每个可供插入的“<ui:insert>锚点”进行定义。 在运行期,具体的内容将会被插入到 <ui:composition>中定义的锚点位置。
与<ui:component> 的异同
相同点:标签以外的内容被编译器忽略 ,不会显示在视图中 。
不同点:ui:composition 不会在组件树上创建节点。
<ui:decorate>
<ui:decorate>标签是一个模板标签,它将一些可以被其它Facelets 页面所包含的内容封装起来。
标签外部的内容编译时会被包含进来
Attributes
属性名称 |
必需 |
描述 |
template |
否 |
将在标签开始和结束之间显示的模板文件所在的路径 |
与 <ui:fragment> 的异同
相同点:标签外部的内容编译时会被包含进来。
不同点:<ui:fragment>不会在组件上创建节点。
<ui:define>
ui:define 标签用于将命名的内容插入到模板中 , 它在模板标签(如composition 和 decorate)的内部使用。
define 的name 属性必须和目标模板中ui:insert 标签的name 属性一致。
Attributes
属性名称 |
必需 |
描述 |
name |
是 |
必须和目标模板中ui:insert 标签的name 属性一致 |
<ui:insert>
ui:insert标签用来在模板中指定一个插入点,可以被客户端模板中 ui:define定义的内容所代替。
Attributes
属性名称 |
必需 |
描述 |
name |
否 |
用来和客户端模板中ui:define 标签的name 属性相一致 , 如果没有指定,整个客户端模板将被插入。 |
<ui:param>
指定一个传入到所含文件或者模板的参数。
Attributes
属性名称 |
必需 |
描述 |
name |
是 |
参数名 |
value |
是 |
参数值 |
<ui:component>
<ui:component> 标签在JSF组件树中插入一个 UIComponet实例,并作为所有它所包含的组件或内容片断的根节点。
标签以外的内容将被编译器忽略
Attributes
属性 |
必需 |
描述 |
id |
否 |
和所有的组件一样,可以这它提供一个 id,如果没有设置, Facelets 将按照 JSF 的规则为它创建一个。 |
binding |
否 |
按照 JSF 的规范 , 这个属性的作用是通过指向 ManagedBean 的一个属性来引用UIComponet 的实例 , 如果 ManagedBean的这个属性没有事先初始化,UIComponet 实例将延迟 (lazily) 被创建。 |
Example
这里以及这里以前的内容将被忽略 <ui:componentbinding="#{backingBean.myComponent}"> <div>The directory contains #{totalBirds} birds!</div> </ui:component> 这里以及这里后的内容将被忽略 |
The directory contains #{totalBirds} birds! |
<ui:fragment>
<ui:fragment>标签在 JSF 组件树中插入一个UIComponet实例,并作为标签内部所有它所包含的组件或内容片断的根节点 。
标签外部的内容编译时会被包含进来
Attributes
属性名称 |
必需 |
描述 |
id |
否 |
和所有的组件一样,可以这它提供一个 id,如果没有设置, Facelets 将按照 JSF 的规则为它创建一个。 |
binding |
否 |
按照 JSF 的规范 , 这个属性的作用是通过指向 ManagedBean 的一个属性来引用UIComponet 的实例 , 如果 ManagedBean的这个个属性没有事先初始化,UIComponet 实例将惰性 (lazily) 被创建 . |
Example
This will not be ignored <ui:fragment> <div> <h:outputText value="I want #{eagle.total} eagles."/> </div> </ui:fragment> This will not be ignored |
This will not be ignored <div>I want 3 eagles.</div> This will not be ignored |
<ui:debug>
当在Facelets页面中放置<ui:debug>标签时,调试组件会添加到该页面的组件树中。
如果用户输入热键(默认情况下是CTRL +SHIFT + D),JSF将打开一个窗口并显示组件树和应用程序作用域内变量的状态。
重新定义生成Debug Output窗口的热键
<ui:debughotkey="k"/> |
上述ui:debug的用法将热键重新定义为CTRL + SHIFT + K。
<ui:remove>
<!-- … -->的问题
例如如下代码:
<!-- <h:commandButton id="loginButton" value="#{msgs.lgoinButtonText}" action="planetarium" /> --> |
如果#{msgs.loginButtonText}的计算结果是“Log In”,将在生成的HTML页面中可以看到如下结果:
<!-- <h:commandButton id="loginButton" value="Login" action="planetarium" /> --> |
该使用ui:remove
<ui:remove> <h:commandButtonid="loginButton"value="#{msgs.lgoinButtonText}"action="planetarium"/> </ui:remove> |
在XHTML页面添加JavaScript代码问题
<scripttype="text/javascript"> if(1> 10){ } </script> |
上面的代码应改成:
<scripttype="text/javascript"> if(1 > 10){ } </script> |
或:
<ui:repeat>
迭代列表、数组、结果集合或单个对象。
-
迭代时,它迭代数组、列表和结果集等中的每一项。项的名称由var属性指定。如果value属性指定的是Java对象,那么只迭代一次,使对象能在标签主体中使用。
Attributes
属性名称 |
必需 |
默认值 |
描述 |
offset |
否 |
0 |
遍历开始处的索引 |
step |
否 |
1 |
连接索引值之间的差值 |
size |
否 |
(集合大小 - offset)/ step |
迭代次数 |
var |
是 |
|
当前遍历的对象 |
value |
是 |
|
遍历的对象。该对象可以是普通Java对象、数组、集合java.sql.ResultSet、javax.servlet.jsp.jstl.sql.Result、javax.faces.model.DataModel |
varStatus |
否 |
|
当前的迭代状态 |
varStatus
特性 |
Getter |
描述 |
current |
getCurrent() |
当前这次迭代的(集合中的)项 |
index |
getIndex() |
当前这次迭代从 0开始的迭代索引 |
count |
getCount() |
当前这次迭代从 1开始的迭代计数 |
first |
isFirst() |
用来表明当前这轮迭代是否为第一次迭代的标志 |
last |
isLast() |
用来表明当前这轮迭代是否为最后一次迭代的标志 |
begin |
getBegin() |
begin属性值 |
end |
getEnd() |
end 属性值 |
step |
getStep() |
step属性值 |
相关推荐
"jsf学习必备——实用工具书"很可能包含了一份详细教程或指南,帮助初学者快速上手JSF。 JSF的基础知识: 1. **模型-视图-控制器(MVC)架构**:JSF是基于MVC设计模式的,其中模型负责业务逻辑,视图负责用户界面...
本章主要聚焦于JSF中的一个重要组成部分——JSF标签,它是用来构建动态、交互式用户界面的组件。 JSF标签在HTML或XML文档中使用,类似于JSP标签,但它们提供了更高级的功能和灵活性。这些标签对应于JSF组件,这些...
1. **Facelets基础**:了解Facelets的基本概念和语法,包括如何使用Facelets标签库。 2. **组件化和模板化**:学习如何利用Facelets进行组件化和模板化设计,提高代码的复用性和可维护性。 3. **高级特性**:探索...
特别是其视图技术——Facelets,更是为JSF注入了新的活力。 #### 三、JSF视图技术:JSP与Facelets ##### 3.1 JSP作为JSF的默认视图技术 - **优点**:作为J2EE标准的一部分,JSP提供了稳定且成熟的视图解决方案。 - ...
**JSF2学习笔记1——理解JavaServer Faces 2.0框架** JavaServer Faces (JSF) 是一种基于组件的Web应用程序开发框架,由Sun Microsystems(现为Oracle Corporation的一部分)开发,旨在简化用户界面构建。JSF2是该...
本DEMO——"JSF-Demo.rar" 是一个适用于初学者的实践项目,旨在帮助学习者快速理解和掌握JSF的基本概念和使用方法。 在"第14章JSF代码"这个压缩包中,我们可以期待找到以下几个关键的知识点: 1. **JSF基本概念**...
今天,我们将深入探讨一个由个人开发的JSF博客系统——"myblogger",它是专为初学者设计的,旨在帮助他们更好地理解和掌握JSF的核心概念。 “myblogger”项目首先展示了JSF的基础架构。JSF的核心是组件模型,它允许...
为了方便地在 JSF 页面中实现基于角色的安全控制,Spring Security 提供了一套专门针对 Facelets 的标签库。该标签库的主要作用是根据用户的权限来显示或隐藏页面上的元素。以下是该标签库的基本结构: ```xml ...
JSF通过明确区分开发者的角色——网页设计人员、应用程式设计人员和UI元件开发人员,使得团队协作更加高效。以下是关于JSF的详细知识点: 1. **组件化开发**: - JSF的核心是组件模型,它允许开发者创建可重用的UI...
"mojarra-2.0.0-EDR1-binary.zip" 文件中包含的是JSF 2.0的第一个草稿版本——2.0.0 Early Development Release 1 (EDR1),虽然它标记为草稿,但其稳定性和功能性已经足够供开发者使用和探索。 **JSF 2.0 的核心...
《JSF源代码详解——基于2013年的"我的书"项目》 Java Server Faces (JSF) 是一个用于构建Web应用程序的Java框架,它为开发者提供了丰富的组件库和事件处理模型。在这个名为"book-java-server-faces-jsf"的项目中,...
《网上书店(cdstore)——基于Java和JSF的简易购物车系统详解》 网上书店(cdstore)是一个采用Java技术和JavaServer Faces (JSF)框架构建的简单购物车应用程序。这个项目旨在提供一个基础的在线购书平台,让学习...
此外,JSF还提供了Facelets作为视图层模板技术,使得页面布局和逻辑分离,提高代码的可维护性。在本博客系统中,JSF标签被用来创建动态的、交互式的博客文章列表、详情页和评论功能。 **数据库设计——SQL Server**...
3. **JSF 1.2**:进一步完善了UI组件模型,增强了与Facelets技术的整合。 4. **JavaServer Pages (JSP) 2.1** 和 **Servlet 2.5**:继续优化了Web开发的APIs,增加了更多功能。 5. **JavaMail API** 和 **JavaBeans ...
6. **状态管理**:JSF支持两种状态管理方式——无状态和有状态。无状态意味着每个请求独立处理,而有状态则会在请求之间保存组件的状态,适用于需要保持用户会话的应用。 7. **依赖注入**:JSF 2.0引入了CDI...