欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JSF —— Facelets 标签

程序员文章站 2022-04-26 18:43:32
...

          最初是作为对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:componentui:composition等标签或是简单的XHTMLXML 代码片断的文件。

 

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 标签用于将命名的内容插入到模板中 , 它在模板标签(如compositiondecorate)的内部使用。

definename 属性必须和目标模板中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 &gt; 10){

}

</script>

或:

 

 

<ui:repeat>

迭代列表、数组、结果集合或单个对象。

  • 迭代时,它迭代数组、列表和结果集等中的每一项。项的名称由var属性指定。如果value属性指定的是Java对象,那么只迭代一次,使对象能在标签主体中使用。

 

Attributes

属性名称

必需

默认值

描述

offset

0

遍历开始处的索引

step

1

连接索引值之间的差值

size

(集合大小 - offset/ step

迭代次数

var

 

当前遍历的对象

value

 

遍历的对象。该对象可以是普通Java对象、数组、集合java.sql.ResultSetjavax.servlet.jsp.jstl.sql.Resultjavax.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属性值