在使用自己的tag时,首先需要在web.xml里面进行注册,注册方式是在web.xml开头加上:

 <context-param>
        <param-name>facelets.LIBRARIES</param-name>
        <param-value>/WEB-INF/facelet-taglibs/echo.taglib.xml</param-value>
    </context-param>
并且tag的模版都要在WEB-INF目录下,不然就会找不到
然后是开始定义这个tag, 建立/WEB-INF/facelet-taglibs/echo.taglib.xml
<?xml version="1.0"?>
<!DOCTYPE facelet-taglib PUBLIC
"-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN"
"http://java.sun.com/dtd/facelet-taglib_1_0.dtd">

<?xml version="1.0"?>
<!DOCTYPE facelet-taglib PUBLIC
"-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN"
"facelet-taglib_1_0.dtd">
<facelet-taglib>
    <namespace>http://www.myfaces.com/facelets/tags</namespace>

<tag>
   <tag-name>tree2</tag-name>
   <source>../../tree2.xhtml</source>
</tag>

<tag>
   <tag-name>datatable</tag-name>
   <source>../../datatable.xhtml</source>
</tag>
</facelet-taglib>
注意的是, <source>tpl/echo.xhtml</source>, source标明的文件也要在WEB-INF里面.namespace可以随便命名, 这是给后来引用的.

最后是/pages/myecho.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:tutorial="http://tutorial.facelets">
<body>
<tutorial:echo msg="#{param.message}"/>
</body>
</html>

 
 ui composition
在web.xml添加context-param:

<context-param> 
   <param-name>javax.faces.DEFAULT_SUFFIX</param-name> 
   <param-value>.xhtml</param-value> 
</context-param>

这里我们可以看到,我们之后使用的都将是xhtml而不是传统的jsp。

在faces-config.xml里面声明view-handler:

<application> 
   <view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
</application>

那么当我们使用导航规则<navigation-rule>的时候,就会导航到.xhtml页面了。

Ok,配置完成。

二.如何使用facelet?

facelet布局强大的地方就是使用了模板,这个模板是一个xhtml文件,我们需要在这个xhtml里面设置一些<ui:insert>,例如我们先建一个template.xhtml:

<?xml version="1.0" encoding="UTF-8"?>

<html xmlns=http://www.w3.org/1999/xhtml

xmlns:ui="http://java.sun.com/jsf/facelets">

<head><meta> http-equiv="Content-Type" content="text/html;charset=UTF-8"/>

<title><ui:insert name="title">这里我们填写默认title</ui:insert></title>

</head>

<body>

Hi,facelet<br/>

<ui:insert name="content"></ui:insert>

<body>

</html>

这个xhtml很容易理解,首先设置xmlns命名空间,就是jsp的<@taglib>,ui就相当于<@taglib>的prefix,值就相当于<@taglib>的uri。我们使用到了facelet的<ui:insert>标签。这个标签表示使用这个模板的页面需要扩展的位置,位置名就是name属性的值啦。如果使用模板的页面没扩展这个位置,那么就使用默认值。

好,编写使用这个模板的页面composition.xhtml:

<?xml version="1.0" encoding="UTF-8"?>

<html xmlns=http://www.w3.org/1999/xhtml

xmlns:ui="http://java.sun.com/jsf/facelets"

xmlns:h="http://java.sun.com/jsf/html"

xmlns:f="http://java.sun.com/jsf/core">

<body>

<ui:composition template="template.xhtml">

<ui:define name="content"><h:outputText value="我们在这里扩展content啦" /></ui:define >

</ui:composition>

<body>

</html>

这个页面你可以看到我添加了JSF的自定义标签声明,也就相当于声明了<@taglib>。

然后ui:composition的template属性选择调用那个模板,ui:define的那么属性选择扩展哪个位置。

在这个页面,我没有扩展title位置,仅仅扩展了content位置,然后输出h:outputText的值。

Ok,测试一下,运行项目,然后去到composition.xhtml。

我们会看到页面的title显示“这里我们填写默认title”

页面里面则显示:

Hi,facelet

<ui:composition>是一个模版标签,它将一些可以被其他Facelets页面所包含的共有内容封装起来。

该标签的属性:
template  该属性不一定必需   意为:将在标签开始和结束之间显示的模版文件所在的路径
<ui:composition> 指定使用那个模版文件,然后通过<ui:define>对模版文件中每个可以供插入的<ui:insert>锚点进行定义。

在运行期,具体的内容将会被插入到<ui:composition> 中定义的锚点位置。

<ui:define>标签用于将命名的的内容插入到模版中,它在模版标签的(如:composition和decorate)内部使用,define的name属性必须和目标模版中的insert 的name属性相同。

该标签的name属性必须有,必须和insert标签的name属性相同。

define标签的内部的内容将插入到目标中的insert标签的name属性标签处,define标签外部内同将被忽略。

insert标签用于模版中指点的插入点,该点将会被define标签的内容所替代。

<ui:include>标签用来在文件中包含另一个facelets文件,它只要指定被包含的文件的位置,它就可以包含任何拥有<ui:component>或<ui:composition>等标签或简单的xhtml和xml代码片段文件。

该标签有一个必须属性src 属性值可以为简单的的值或EL表达式,用来指定所包含的的facelets文件的位置。可以是相对路径也可以是绝对路径。

JSF的ui标签的更多相关文章

  1. 【转】JSF中的三大核心组件 UI标签的详细介绍和使用举例

    JSF提供了大量的UI标签来简化创建视图.这些UI标签类似于ASP.NET中的服务器组件.使用这些标签,可以通过其value,binding,action,actionListener等属性直接绑定到 ...

  2. 【Java EE 学习 36】【struts2】【struts2系统验证】【struts2 ognl值栈】【struts2 ongl标签】【struts2 UI标签】【struts2模型驱动和令牌机制】

    一.struts2系统验证 1.基于struts2系统验证的方式实际上就是通过配置xml文件的方式达到验证的目的. 2.实际上系统校验的方法和手工校验的方法在底层的基本实现是相同的.但是使用系统校验的 ...

  3. 二十四、Struts2中的UI标签

    二十四.Struts2中的UI标签 Struts2中UI标签的优势: 数据回显 页面布局和排版(Freemark),struts2提供了一些常用的排版(主题:xhtml默认 simple ajax) ...

  4. Struts2 UI标签

    表单标签的共同属性(该属性只在没有使用 simple 主题时才可以使用) form 标签  用来呈现 HTML 语言中的表单元素 默认情况下, form 标签将被呈现为一个表格形式的 HTML 表单. ...

  5. OGNL逻辑标签,UI标签

    逻辑标签 public class IndexAction extends BasicAction{ private static final long serialVersionUID = 1L; ...

  6. 解决struts2中UI标签出现的问题: The Struts dispatcher cannot be found

    解决struts2中UI标签出现的问题: The Struts dispatcher cannot be found 异常信息: The Struts dispatcher cannot be fou ...

  7. UI标签库的话题:JEECG智能开发平台 BaseTag(样式表和JS标签的引入)

    UI标签库专题一:JEECG智能开发平台 BaseTag(样式表和JS引入标签) 1.BaseTag(样式表和JS引入标签) 1.1. 演示样例 <t:base type="jquer ...

  8. Struts2第十一篇【简单UI标签、数据回显】

    Struts2UI标签 Sturts2为了简化我们的开发,也为我们提供了UI标签-也就是显示页面的标签-.. 但是呢,Struts2是服务端的框架,因此使用页面的标签是需要在服务器端解析然后再被浏览器 ...

  9. Struts2【UI标签、数据回显、资源国际化】

    Struts2UI标签 Sturts2为了简化我们的开发,也为我们提供了UI标签...也就是显示页面的标签..... 但是呢,Struts2是服务端的框架,因此使用页面的标签是需要在服务器端解析然后再 ...

随机推荐

  1. C语言基础学习

    汇编语言又叫符号语言 出来机器语言和汇编语言外其他语言必须经过翻译(编译,和解释行)才可以执行 .c --> 编译(翻译成二进制代码 .obj) 链接 把目标程序和库函数以及其他目标程序链接起来 ...

  2. bug_ _ _android.app.Fragment$InstantiationException 解决办法

    在实际的开发中,我遇到过两次android.app.Fragment$InstantiationException报错. 其中一次报错,根据报错提示 “make sure class name exi ...

  3. Introduction to ASP.NET Web Programming Using the Razor Syntax (C#)

    1, http://www.asp.net/web-pages/overview/getting-started/introducing-razor-syntax-c 2, Introduction ...

  4. linux操作系统的分类及解释

    什么是Linux? 也许很多人会不屑的说,Linux不就是个操作系统么.错!Linux不是一个操作系统,严格来讲,Linux只是一个操作系统中的内核.内核是什么?内核建立了计算机软件与硬件之间通讯的平 ...

  5. AES对称加密算法原理(转载)

    出处:http://www.2cto.com/Article/201112/113465.html 原著:James McCaffrey 翻译:小刀人 原文出处:MSDN Magazine Novem ...

  6. Java多线程之后台线程

    将线程设置成后台线程Daemons 主线程结果后,后台线程将自动结果. package wzh.test; import java.util.concurrent.TimeUnit; class Si ...

  7. linux下批量修改文件名之rename

    最近因为突然用到需匹配更换文件名,发现rename命令真是 简单好用,和sed语法及vim 替换很相似. 1. 更改文件名后缀 rename 's/\.txt/\.html/' * 2.增加文件名后缀 ...

  8. EDE,DEDE网站搬家,DEDECMS搬家教程,一看就会

    无聊做个小教程:DEDE搬家,本人提供搬家 先来说下DEDE 大家会安装吧,不多说,看图 一.进入织梦DedeCms的后台备份数据库 步骤:系统 –> 数据库备份/还原 -> 全选有所织梦 ...

  9. 【在线】Actionbar Style Generator:ActionBar风格生成器

    这个ActionBar风格生成器可以让你轻松地创建一个简洁.有吸引力且无漏洞的自定义actionbar.它会生成所有9种必须的patch assets以及相关XML的drawables和styles文 ...

  10. 90、 Android UI模板设计

    第一步:自定义xml属性 新建一个android项目,在values文件夹中新建一个atts.xml的文件,在这个xml文件中声明我们一会在使用自定义控件时候需要指明的属性.atts.xml < ...