如何创建<facelet-taglib tagdir

JSTL Facelets Function Library.
(Apache MyFaces JSF-2.0 Core Impl Tag library documentation for Facelets)
JSTL Facelets Function Library.
Standard Syntax:
&%@ taglib prefix="fn" uri="/jsp/jstl/functions" %&
XML Syntax:
&anyxmlelement xmlns:fn="/jsp/jstl/functions" /&
JSTL Facelets Function Library.
Display NameJSTL Facelets Function Library.
Version2.0
Short Namefn
URI/jsp/jstl/functions
boolean( java.lang.String name, java.lang.String searchString)no description
boolean( java.lang.String name, java.lang.String searchString)no description
boolean( java.lang.String name, java.lang.String searchString)no description
java.lang.String( java.lang.String value)no description
int( java.lang.String name, java.lang.String searchString)no description
java.lang.String( java.lang.String[] a, java.lang.String delim)no description
int( java.lang.Object obj)no description
java.lang.String( java.lang.String value, java.lang.String a, java.lang.String b)no description
java.lang.String[]( java.lang.String value, java.lang.String d)no description
boolean( java.lang.String value, java.lang.String p)no description
java.lang.String( java.lang.String v, int s, int e)no description
java.lang.String( java.lang.String v, java.lang.String p)no description
java.lang.String( java.lang.String v, java.lang.String s)no description
java.lang.String( java.lang.String v)no description
java.lang.String( java.lang.String v)no description
java.lang.String( java.lang.String v)no description
Java, JSP, and JavaServer Pages are trademarks or registered
trademarks of Sun Microsystems, Inc. in the US and other countries.
Copyright 2002-3 Sun Microsystems, Inc.
4150 Network Circle
Santa Clara, CA 95054, U.S.A.
All Rights Reserved.Custom tags in JSF 2.0
| October 18, 2010 | Updated : August 29, 2012 | Viewed : 97,367 times +156 pv/w
In JSF 2.0, you are allow to create your custom tag to render a pre-defined content. A custom tag is look like a normal JSF tag, and uses “ui:composition” to insert
content into the page.
Here’s the summary steps to create a custom tag in JSF 2.0.
Uses :ui:compisition” tag to create a predefined content in an XHTML page.
Declares the custom tag in a tag library descriptor.
Register the tag library descriptor in the web.xml.
Custom Tag Example
A guide to create a custom tag, which will insert two pre-defined submit and reset buttons into a page.
1. Custom Tag
Create a normal XHTML file to implement the custom tag, which uses “ui:composition” tag to group submit and reset button together.
WEB-INF/tags/com/mkyong/button.xhtml
&?xml version="1.0" encoding="UTF-8"?&
&!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="/jsf/html"
xmlns:ui="/jsf/facelets"
&ui:composition&
&h:commandButton type="submit" value="#{buttonSubmitLabel}" /&
&h:commandButton type="reset" value="#{buttonResetLabel}" /&
&/ui:composition&
2. Tag Library
Define custom tag detail in a tag library descriptor file.
namespace – Namespace of this tag library, create an unique name to avoid conflict.
tag-name – Custom tag name.
source – Implementation of the custom tag.
WEB-INF\mkyong.taglib.xml
&?xml version="1.0"?&
&!DOCTYPE facelet-taglib PUBLIC
"-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN"
"/dtd/facelet-taglib_1_0.dtd"&
&facelet-taglib&
&namespace&/facelets&/namespace&
&tag-name&button&/tag-name&
&source&tags/com/mkyong/button.xhtml&/source&
&/facelet-taglib&
3. Register in web.xml
Register the tag library in web.xml file.
&!-- Load custom tag into JSF web application --&
&context-param&
&param-name&facelets.LIBRARIES&/param-name&
&param-value&/WEB-INF/mkyong.taglib.xml&/param-value&
&/context-param&
4. Use Custom Tag
To use the custom tag, you have to declare its namespace on top, and use it like a normal JSF tag.
&?xml version="1.0" encoding="UTF-8"?&
&!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="/jsf/html"
xmlns:ui="/jsf/facelets"
xmlns:mkyong="/facelets"
&h1&Custome Tags in JSF 2.0&/h1&
&mkyong:button
buttonSubmitLabel="Submit"
buttonResetLabel="Reset" /&
The “mkyong:button” custom tag will render one submit button and one reset button.
Download Source Code
Download It –
Share this article on
About the Author
Founder of , love Java and open source stuff. Follow him on , or befriend him on
or . If you like my tutorials, consider make a donation to .
Related Posts
Popular Posts
Loading...
Sort by: &
| most votedcom.sun.facelets.FaceletViewHandler
JavaServer Faces默认使用JSP文件定义视图(*.jsp)。你需要在你的WEB-INF/web.xml中修改该类型。 javax.faces.DEFAULT_SUFFIX .xhtml 依照上面定义的context-param,你就可以开始写Facelets并且将他们保存为以.xhtml类型的文档。你现在可以开始使用Facelets了。内建类库Facelets使用JavaServer Faces API 中所有UIComponents的方法和你在JSP中使用的方法一样。这就意味着你可以在线的JSF的tag类库文档。也有一个简单的JSTL的核心库提供给你 和 。最后,Facelets内建了一个UI标签库提供了模板化和重用性。关于这方面更多的资料在本文的第三篇文章中。建立一个FaceletFacelets仅仅需要严格的XML格式。他们不依赖于XHTML语法,可以被使用到VML,SVG,甚至SOAP中。使用JSP,你通常反复的引用标签库,而Facelets只需要在编译期间找到命名空间即可,和JSPX类似。这里是一个XHTML文档的开始部分:&lthtml xmlns="https://www.w3.org/1999/xhtml" xmlns:h="/jsf/html" xmlns:f="/jsf/core"> &lthead> &ltmeta http-equiv="Content-Type" content="text/ charset=iso-8859-1" /> My First Facelet
Hello #{param.name}!
你可以把这段代码保存为test.xhtml然后即刻请求test.jsf?name=Jacob(如果你的FacesServlet被map到*.jsf)。这是一个很好的用来确保你已经正确设置Facelets的测试。使用ELFacelets使用JSF中新的EL-API规范。这就意味着你可以交替使用${ } 或者 #{ },而不像是JSP。如上例所示,表达式可以内嵌正则文本。如果你使用JSF1.2,你可以添加你自己定义的ELResolvers来整合诸如Spring,EJB,JNDI等等。--全部都可以如果你需要的话。你甚至可以拥有适合你应用程序对象的ELResolvers。EL-API是JSP2.1规范的一部分,但是不依赖于JSP或者JSF。这就意味着它可以和Facelets一起被应用到任何部署中。使用组件在上面的test.xhtml实例中,你发现了额外的命名空间被申明。这些和JavaServer Faces API中内建的JSP标签库的命名空间相同。再次,Facelets期望建立在常见的领域和文档之外。当你使用Facelets中内建的JSF组件,有一个标签库文档是一件很好的事。既然我们已经有了test.xhtml作为开始,让我们来创建一个简单的表单。将下面的代码加入你页面的body中:
下面的步骤将是创建你自己的backingbean(BB)并修改faces-config.xml。别名组件(jsfc)前面的方法使用了特殊的标签,而使得他们在一个HTML编辑器工具(比如Dreamweaver)中不是特别好看。Facelets提供了一种不同的方法,使用标准HTML元素的jsfc属性来指定你页面中的组件(非常类似于Tapestry 和 Struts Shale 的 Clay plugin)Facelets编译器寻找文档中所有组件的jsfc属性。jsfc属性的值是页面设计者用来在该页面中取代此元素值的别名。&ltinput type="text" jsfc="h:inputText" value="/web/#{foo.bar}"/>Facelets在编译的时候将会生成一个h:inputText组件,同时将会自动配置所有合适的属性。别名组件允许设计工具看到正常的HTML input标签,而编程人员可以将之看成是一个在jsfc属性中定义的JSF组件。Facelet 编译如第一篇文中提到的,Facelets只编译规范的XML。这些文件可以只有一行或者三行,唯一的要求就是它必须是合法的XML文档。Facelets使用SAX来将文档编译成拥有TagHandlers的无状态树包含在一个Facelet对象中。Facelets是线程安全的并且可以被简单的应用在一次多请求的大规模部署中。Facelets在编译期间提供在JSF中使用到类库及视图操作的警告消息和报告。执行Facelets编译是简单的,如下所示:// grab our FaceletFactory and create a Facelet FaceletFactory factory = FaceletFactory.getInstance(); Facelet f = factory.getFacelet(viewToRender.getViewId()); // populate UIViewRoot f.apply(context, viewToRender);更多关于Facelet的体系架构将会在稍后的文章中提供。Exceptions & DebuggingFacelets注重了错误操作的解决。举个例子,有次你不小心的打错了一个属性的表达式,Facelets将会在编译期间自动生成一条如下的错误信息:greeting.xhtml @18,97 &ltinput action="#{success[}"> Error Parsing: #{success[}正如你所看到的,Facelets为你提供了错误消息来告诉你什么文件哪一行哪一列发生了错误。它甚至提供了发生错误的元素及属性。Facelets也使用java.util.logging包来打印出排错消息。你可以阅读这里来了解如何在你的JRE中设置日值。自定义组件Facelets允许你使用一个XML文件或者Java代码来自定义你自己的组件库,但是在此篇文中我将只会涉及使用XML配置,因为XML配置是更好的选择。 /jsf
javax.faces.Data com.mycompany.Bar
这就是你整合你的组件到Facelets中所要做的全部工作。这些XML文档可以使用下面两种方法参考。(译注:关于在Facelets中如何使用Tomahawk组件,可在此查阅)Reference them in a ";" delimitted list within your web.xml under the init-param "facelets.LIBRARIES". These files are relative to your application, just like referencing Struts configuration files.在你的web.xml的init-param?facelets.LIBRARIES?中引用,使用?;?分隔不同XML配置文件。这些文档和你的应用程序有关,就如同引用Struts的配置文件一样。Package them in your JAR's META-INF folder with a file extension of ".taglib.xml". Facelets will automatically pick these up for compilation just as with JSP tld files. 将它们打包到你的JAR文件中的META-INF文件夹中,使用一个以?.taglib.xml?结尾的文件。Facelets将会自动将这些读入编译,就好像JSP的tld文件。在facelet-taglib文件中,你也可以指定转换器,验证器,和自定义的TagHandler来获取文件处理的的最终控制。自定义验证器和转换器验证器和转换器可以在Facelet中通过同一个facelet-taglib文档描述。 /public
validateRegExp
foo.bar.RegExp
convertUtilDate
foo.bar.UtilDate
再次,由于Facelets和JavaServer Faces的API整合的很紧密,这些就是你所要定义的全部。Facelets将会自动装配这些属性到你的Converter或者是Validator对象中。自定义组件好的,我还没有想到但是你想在Facelets中添加你的自定义组件。这就包含了你想要为UIComponents,Validators,Converters装配各自的属性。Facelets提供了许多基本类来使得你的工作更简单。让我们来看看的源码,或许能给你一些好主意:public final class IfHandler extends TagHandler { protected final TagA protected final TagA public IfHandler(TagConfig config) { super(config); this.test = this.getRequiredAttribute("test"); this.var = this.getAttribute("var"); } public void apply(FaceletContext ctx, UIComponent parent) throws IOException, FacesException, ELException { boolean b = this.test.getBoolean(ctx); if (this.var != null) { ctx.setAttribute(var.getValue(ctx), new Boolean(b)); } if (b) { this.nextHandler.apply(ctx, parent); } } }这就是了!你将发现当文档被编译的时候Facelets使用了?好居民?法则和构造函数注入的方法。Facelets和全部标签都是无状态的,而不像JSP(添加入了tag handler对象)。更多技术方面的细节将会在一篇不同的文档中提供,所以现在酒描述tag里面是如何进行的。TagHandler, 继承的,是一个很好的让你可以使用开发自定义标签的基本类示例。将TagHandler想象成JSP的TagSupport或者BodyTagSupport。在构造函数中,该Tag的表现被传递,转达了该文档的结构包含的:位置,子标签,和属性。TagAttributes是XML文档中属性的表现。他们有众多方法来处理EL表达式和高压方法到你需要的类型中。他们也是无状态的,他们的方法必须要传递到FaceletContext中以提供当前的状态。最后一点比较有趣的就是子元素被部分变量nextHandler表现。你可以在的情况下添加任意多的子元素或者根本不添加。我们自定义的组件已经写了出来,你可以继续将它添加到facelet-taglib文档中: /public
if com.jsfcentral.IfHandler
总结这仅仅是使用Facelets框架的一个简短介绍。接下来将会有更多关于模板化,特色和定制Facelets的详细文章。
联系QQ: 邮箱:
本文地址: /article-.shtml 欢迎转载拒绝访问 |
| 百度云加速
请打开cookies.
此网站 () 的管理员禁止了您的访问。原因是您的访问包含了非浏览器特征(3a3e8b-ua98).
重新安装浏览器,或使用别的浏览器

我要回帖

更多关于 jsp taglib 的文章

 

随机推荐