最近在用JSF做项目,其中也借用了facelets和richfaces额的相关辅助插件。呵呵,发现facelets的自定义标签真的很方便,所以在此的例子是做的一个基本的分页控件(用于xhtml页面):
1.首先与JSP额自定义标签类似,在web-inf下建立一个pager.taglib.xml的文件,内容大致如下:
<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE facelet-taglib
PUBLIC "-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN"
"http://java.sun.com/dtd/facelet-taglib_1_0.dtd">
<facelet-taglib>
<namespace>http://www.bypage.com/page</namespace>
<tag>
<tag-name>pager</tag-name>
<source>pager.xhtml</source>
</tag>
</facelet-taglib>
2. 要使用自定义的facelets标签,在web.xml中必须做如下配置:
<context-param>
<param-name>facelets.LIBRARIES</param-name>
<param-value>/WEB-INF/pager.taglib.xml</param-value>
</context-param>
3.配置pager.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">
<ui:composition 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"
xmlns:rich="http://richfaces.org/rich"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:t="http://myfaces.apache.org/tomahawk"
xmlns:c="http://java.sun.com/jstl/core"
>
<f:view>
记录数:<h:outputText value="#{backingBean.maxItems}" />
总页数:<h:outputText value="#{backingBean.maxPages}" />
当前页:<h:outputText value="#{backingBean.pageNumber}" />
<c:if test="#{backingBean.maxPages gt 0 and backingBean.pageNumber ne 1}">
<h:commandLink action="#{backingBean[action]}" value="首页" >
<f:param name="pageNumber" value="1"></f:param>
<f:param name="maxPageItems" value="#{backingBean.maxPageItems}"></f:param>
</h:commandLink>
</c:if>
<c:if test="#{backingBean.maxPages le 0 or backingBean.pageNumber eq 1}">
首页
</c:if>
<c:if test="#{backingBean.pageNumber gt 1}">
<h:commandLink action="#{backingBean[action]}" value="上一页" >
<f:param name="pageNumber" value="#{backingBean.prePage}"></f:param>
<f:param name="maxPageItems" value="#{backingBean.maxPageItems}"></f:param>
</h:commandLink>
</c:if>
<c:if test="#{backingBean.pageNumber le 1}">
上一页
</c:if>
<c:if test="#{backingBean.pageNumber lt backingBean.maxPages}">
<h:commandLink action="#{backingBean[action]}" value="下一页" >
<f:param name="pageNumber" value="#{backingBean.nextPage}"></f:param>
<f:param name="maxPageItems" value="#{backingBean.maxPageItems}"></f:param>
</h:commandLink>
</c:if>
<c:if test="#{backingBean.pageNumber ge backingBean.maxPages}">
下一页
</c:if>
<c:if test="#{backingBean.maxPages gt 0 and backingBean.pageNumber ne backingBean.maxPages}">
<h:commandLink action="#{backingBean[action]}" value="末页" >
<f:param name="pageNumber" value="#{backingBean.maxPages}"/>
<f:param name="maxPageItems" value="#{backingBean.maxPageItems}"/>
</h:commandLink>
</c:if>
<c:if test="#{backingBean.maxPages le 0 or backingBean.pageNumber eq backingBean.maxPages}">
末页
</c:if>
页码:<h:inputText value="#{backingBean.PAGER_pageNumber}" name="PAGER_pageNumber" id="PAGER_pageNumber" size="2" />
<h:commandLink action="#{backingBean[action]}" value="转到" >
<f:param name="pageNumber" value="#{backingBean.PAGER_pageNumber}"></f:param>
<f:param name="maxPageItems" value="#{backingBean.maxPageItems}"></f:param>
</h:commandLink>
每页:
<h:inputText name="maxPageItems" size="2" id="mpg" value="#{backingBean.maxPageItems}"></h:inputText>
<h:commandLink action="#{backingBean[action]}" value="显示" >
<f:param name="pageNumber" value="1"></f:param>
<f:param name="maxPageItems" value="#{backingBean.maxPageItems}"></f:param>
</h:commandLink>
</f:view>
</ui:composition>
4.还有一个基本的bean工具类,有上面xhtml中用的所有属性,和基本的分页方法,一旦按照以上方式定义好以后,就可以在任何的xhtml页面中调用以上定义的facelets标签,可以实现和JSP自定义标签一样便捷的效果!!
分享到:
相关推荐
- Spring Web Flow、JSF等框架也提供了自定义标签的机制,进一步丰富了Web2.0开发中的自定义标签应用。 通过自定义标签,Web2.0应用可以更加灵活地构建用户界面,提供定制化的交互体验。同时,这也有助于提升...
在JavaServer Pages (JSP) 技术中,自定义标签是实现页面逻辑与表现分离、提高代码可重用性和可维护性的重要手段。本文将深入探讨如何掌握自定义JSP标签,包括其原理、创建过程以及实际应用。 首先,我们要理解...
10. **扩展 Facelets**:开发者可以通过创建自定义标签处理器和元标签来扩展 Facelets 功能。这包括定义自己的组件行为、事件处理和元数据。 总的来说,Facelets 是一个强大且灵活的视图技术,它简化了 JSF 应用...
- 创建自定义标签库是Facelets的一大优势,开发者可以定义自己的标签,封装复杂的功能,提高代码可读性和可维护性。 6. **AJAX支持** - Facelets与JSF的Ajax功能紧密结合,如`<f:ajax>`标签,可以实现页面局部...
在"exercise"这个练习文件中,可能包含了一些关于使用JSTL、自定义标签或Facelets的示例,通过实际操作和实践,你可以更深入地理解和掌握JavaEE标签技术的应用。学习和掌握这些标签技术,对于提升JavaEE项目的质量和...
JSF还支持自定义标签,开发者可以通过扩展JSF来创建自己的UI组件库。 在"myfaces-example-simple-1.1.7-SNAPSHOT"项目中,你可以看到以下内容: 1. **源代码**:可能包含`.java`文件,这些是后端的Java类,负责...
开发者可以通过创建自定义标签来扩展JSP的功能,自定义标签通常封装了复杂的业务逻辑或视图呈现,使得代码更加模块化和易于维护。 4. Struts标签库 Struts是Apache软件基金会的一个开源项目,它提供了丰富的标签...
自定义标签通过TLD(Tag Library Descriptor)文件进行定义,并在JSP页面中使用。 4. Struts2标签库 Struts2框架提供了丰富的标签库,如: - `<s:textfield>`:创建输入框。 - `<s:submit>`:创建提交按钮。 - ...
自定义组件需要在标签库定义文件(.tld或.xsd)中声明,以便在Facelets模板中使用。这包括组件的标签名、属性和事件。 4. **组件注册(Component Registration)**:自定义组件需要在应用程序的faces-config.xml...
自定义组件通常与自定义标签库(taglib)一起使用,使得组件在JSF页面中的使用更加直观。通过定义TLD(Tag Library Descriptor)文件,可以为每个组件创建对应的XML标签。 6. **组件的生命周期** JSF组件有自己的...
- **自定义标签**:自定义标签的用途和应用场景。 - **MVC与Bean、自定义标签以及框架如Struts或JSF的结合**:如何将这些技术结合使用,构建复杂的Web应用程序。 ##### 构成标签库的组件 - **标签处理器类**:这...
自定义标签**:开发者可以通过实现`UIComponent`接口创建自定义标签,扩展JSF的功能,满足特定项目需求。 **5. 使用EL表达式**:JSF结合了Expression Language(EL),允许在JSP/Facelets页面中直接引用Managed ...
3. **自定义标签**:介绍如何创建和使用自定义标签,以及如何在Struts2框架中使用这些标签增强功能。 4. **其他库的标签**:如Ajax4jsf、Facelets等,这些标签可以用来提升Web应用的交互性和用户体验。 通过阅读这...
将包含组件类、渲染器类和标签文件的JAR文件添加到应用的类路径中,并重新部署应用。现在,你可以在任何JSF页面上使用这个自定义组件。 创建JSF自定义组件是一项复杂但强大的任务,它允许开发者根据项目需求定制Web...
### 自定义标签库 JSF允许开发者创建自己的组件库,通过定义新的UI组件标签来扩展其功能。这些标签可以封装复杂的逻辑,提高代码的可读性和可维护性。 ### JSF与CDI集成 JSF可以与CDI(Contexts and Dependency ...
- **库和标签库**:Facelets支持导入和使用JSF标准组件库,也可以创建自己的自定义标签库,如`layout-*.xhtml`文件可能就是这样的例子。 3. **Facelets模板**: - **模板组件**:Facelets中的模板组件可以定义...
7. **自定义标签**:除了内置标签,开发者还可以创建自定义JSF标签以满足特定需求。这涉及创建自定义组件、标签库描述符(TLD)和注册标签到应用程序。 "login应用"部分可能涵盖了如何使用JSF标签创建一个登录页面...
此外,还可以通过自定义标签扩展JSF的功能,满足特定需求。 在**例子和实践**部分,你可能会学习如何创建一个简单的JSF应用,包括创建Managed Bean,编写视图页面,以及如何处理用户交互。例如,创建一个登录表单,...
2. **动态标签**:Facelets支持自定义标签,这些标签可以与JavaBean或其他后台资源进行交互,提供强大的数据绑定功能。 3. **编译时处理**:与JSP在运行时被解释不同,Facelets在部署时编译成Java类,这大大提高了...
10. **自定义标签**:如果需要扩展JSF的功能,可以学习如何创建自定义标签以复用代码和逻辑。 这本书将帮助你全面掌握JSF标签的使用技巧,并提升你在开发JavaWeb应用时的效率。通过深入学习和实践,你将能够构建出...