`

Myfaces+Richfaces的自定义组件问题。

    博客分类:
  • JSF
阅读更多

问题描述:

    要写一个继承<rich:dataTable>的组件。

环境:

  • tomcat 6.0.14
  • myfaces1.1.5
  • richfaces 3.1.2

相应的配置文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>
			classpath:spring-platform-base.xml,classpath:spring-platform-service.xml
		</param-value>
	</context-param>
	<listener>
		<listener-class>
			org.springframework.web.context.ContextLoaderListener
		</listener-class>
	</listener>
	<description>Platform Application</description>
	<display-name>Platform</display-name>
	<context-param>
		<param-name>javax.faces.DEFAULT_SUFFIX</param-name>
		<param-value>.xhtml</param-value>
	</context-param>
	<context-param>
		<param-name>facelets.REFRESH_PERIOD</param-name>
		<param-value>2</param-value>
	</context-param>
	<context-param>
		<param-name>facelets.DEVELOPMENT</param-name>
		<param-value>true</param-value>
	</context-param>
	<context-param>
		<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
		<param-value>server</param-value>
	</context-param>
	<context-param>
		<param-name>com.sun.faces.validateXml</param-name>
		<param-value>true</param-value>
	</context-param>
	<context-param>
		<param-name>com.sun.faces.verifyObjects</param-name>
		<param-value>true</param-value>
	</context-param>

	<context-param>
		<param-name>org.ajax4jsf.VIEW_HANDLERS</param-name>
		<param-value>com.sun.facelets.FaceletViewHandler</param-value>
	</context-param>
	<context-param>
		<param-name>org.ajax4jsf.COMPRESS_SCRIPT</param-name>
		<param-value>false</param-value>
	</context-param>

	<filter>
		<display-name>Ajax4jsf Filter</display-name>
		<filter-name>ajax4jsf</filter-name>
		<filter-class>org.ajax4jsf.Filter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>ajax4jsf</filter-name>
		<servlet-name>Faces Servlet</servlet-name>
		<dispatcher>FORWARD</dispatcher>
		<dispatcher>REQUEST</dispatcher>
		<dispatcher>INCLUDE</dispatcher>
		<dispatcher>ERROR</dispatcher>
	</filter-mapping>
	<servlet>
		<servlet-name>Faces Servlet</servlet-name>
		<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>Faces Servlet</servlet-name>
		<url-pattern>*.jsf</url-pattern>
	</servlet-mapping>
	<login-config>
		<auth-method>BASIC</auth-method>
	</login-config>
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
		<welcome-file>index.html</welcome-file>
	</welcome-file-list>

	<!-- 标签配置开始 -->

	<!-- 标签配置结束 -->
</web-app>

 

tag组件源文件:PFHtmlTableGridTag.java

import javax.faces.component.UIComponent;
import javax.faces.webapp.UIComponentTag;

public class PFHtmlTableGridTag extends UIComponentTag {
	
	public PFHtmlTableGridTag() {
		System.out.println("hello world");
	}

	
	@Override
	public String getComponentType() {
		return "PFHtmlTableGrid";
	}

	@Override
	public String getRendererType() {
		return null;
	}

	@Override
	protected void setProperties(UIComponent component) {
		super.setProperties(component);
	}

	@Override
	public void release() {
		super.release();
	}
}

 

component组件PFHtmlTableGrid.java

import java.io.IOException;
import java.util.Date;

import javax.faces.component.html.HtmlDataTable;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;

public class PFHtmlTableGrid extends HtmlDataTable {
	@Override
	public void encodeBegin(FacesContext context) throws IOException {
		ResponseWriter writer = context.getResponseWriter();
		writer.startElement("div", this);
		writer.writeAttribute("style", "color:red", null);
		writer.writeText("Hello World! today is:"+new Date(), null);
		writer.endElement("div");
	}
		
	@Override
	public void encodeEnd(FacesContext context) throws IOException {

	}
	
	@Override
	public void decode(FacesContext context) {
		super.decode(context);
	}
	
	@Override
	public String getFamily() {
		return null;
	}
}

 

faces-config.xml相应配置:

<component>
		<component-type>
			PFHtmlTableGrid
		</component-type>
		<component-class>
			com.dongyun.platform.component.jsf.tablegrid.PFHtmlTableGrid
		</component-class>
	</component>

 

标签库文件(存放在WEB/INF目录下):

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
                        "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
	<!-- ============== Tag Library Description Elements ============= -->
	<tlib-version>1.2</tlib-version>
	<jsp-version>1.2</jsp-version>
	<short-name>tags</short-name>
	<uri>/WEB-INF/tags.tld</uri>
	<display-name>bookstore</display-name>
	<description>
		This tag library contains tags used by the bookstore
		application.
	</description>

	<!-- ===================== tags for image map component ============================ -->
	<tag>
		<name>tableGrid</name>
		<tag-class>
			com.dongyun.platform.component.jsf.tablegrid.PFHtmlTableGridTag
		</tag-class>
		<description>
			Description of a single hotspot in a client side image map.
			This tag MUST be nested inside a <map> tag. To specify
			the hotspot characteristics, you must specify EITHER a value
			OR the alt, coords, and shape attributes.
		</description>
	</tag>
</taglib>
 

 

引用该自定义标签的页面:

<?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:rich="http://richfaces.org/rich"
	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:a4j="http://richfaces.org/a4j" 
	xmlns:cd="/WEB-INF/tags.tld"
	xml:lang="en" lang="en">
	<head>
		<title>日志管理界面</title>
		<meta http-equiv="keywords" content="enter,your,keywords,here" />
		<meta http-equiv="description"
			content="A short description of this page." />
		<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
	</head>
	<body>
		<cd:tableGrid />
	</body>
</html>

 

tomcat正常启动没有问题。但是当用firefox打开这个Log.jsf页面时,什么东西都没显示出来。

查看其原代码如下:

<?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:cd="/WEB-INF/tags.tld" xml:lang="en" lang="en">
	<head>
		<title>日志管理界面</title>
		<meta http-equiv="keywords" content="enter,your,keywords,here" />
		<meta http-equiv="description" content="A short description of this page." />
		<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
	</head>
	<body>

		<cd:tableGrid></cd:tableGrid>
	</body>
</html>

 

是不是xhtml什么地方没配对,为什么

<cd:tableGrid></cd:tableGrid>

还显示在页面上呢?

大家帮我看看。谢谢了!

 

 

 

 

  

分享到:
评论
1 楼 chxkyy 2008-01-08  
问题解决,拿出来与大家分享。
xhtml用的是JSF facelet的组件。
所以自定义的不是tld标签,即不用tags.tld
而是要创建facelet的标签库。
默认的扩展名:taglib.xml
这里是tags.taglib.xml(一般放在/WEB-INF/classes/META-INF下)
定义的方法与tags.tld差不多。

相关推荐

    richfaces组件说明文档及使用实例

    它扩展了Apache MyFaces和JSF(JavaServer Faces),提供了一系列强大的UI组件和事件处理机制,帮助开发者创建交互性强、用户体验良好的Web应用。本文档将详细介绍RichFaces的主要组件及其用法,并通过实际例子来...

    Richfaces组件使用指南

    RichFaces还提供了一个组件开发工具包(CDK),简化了自定义富组件的创建。CDK包含代码生成器和类似JSP语法的模板工具,使得创建具有Ajax功能的高级组件变得简单高效。 资源管理是RichFaces的另一大亮点。它支持将...

    richfaces+jsf

    JSF还支持自定义组件的开发,以满足特定需求。 **3. a4jEchoText组件** 在提供的文件列表中,"a4jEchoText"可能是一个示例组件,它可能来自于RichFaces的a4j库。a4j库是RichFaces的一部分,提供了对AJAX功能的扩展...

    RichFaces文档-中文

    - **组件开发工具**:RichFaces的组件开发工具(CDK)简化了自定义组件的创建,包括代码生成器和JSP语法模板,使创建Ajax功能的组件变得更加容易。 - **资源管理**:资源框架允许将资源与自定义组件一起打包到jar...

    richfaces详细使用

    1. **组件开发包(CDK)**:为了方便开发者创建自定义组件,RichFaces提供了一套组件开发工具包(CDK)。该工具包包括代码生成器和模板工具,采用类似JSP的语法,帮助开发者避免重复劳动,轻松创建带有Ajax功能的...

    richfaces.jar

    - **可扩展性:** 通过自定义组件和行为,开发者可以轻松地扩展框架的功能。 **6. RichFaces的应用场景:** RichFaces适用于需要复杂交互、动态更新和丰富用户体验的Web应用,如企业级应用、电子商务平台、数据管理...

    RichFaces 3.3 帮助文档(英文)

    - **RichFaces框架概述:** RichFaces是一个基于JavaServer Faces(JSF)的开源组件库,提供了大量的富客户端组件以及对皮肤的支持。该文档详细介绍了如何在Web应用中集成并使用RichFaces框架。 - **技术需求:** ...

    richfaces开发指南(英文版)

    - **JavaServer Faces实现和框架**:RichFaces设计为与多种JSF实现和框架兼容,例如MyFaces、Mojarra等。请确认你的项目使用的JSF实现与RichFaces兼容。 - **支持的服务器**:RichFaces可在多个应用服务器上运行,如...

    richfaces3.2用户手册的pdf版

    RichFaces 3.2 是一款强大的框架,提供了丰富的组件库以及可定制化的皮肤支持,它旨在简化Web应用程序的开发过程,尤其在JavaServer Faces (JSF) 技术的基础上增加了对AJAX的支持,使得开发者能够构建出更为交互式的...

    richfaces livedemo 3.3最新Eclipse工程

    3. **皮肤和主题**:RichFaces允许开发者自定义组件的外观和风格,通过CSS和皮肤机制,可以轻松调整应用的整体视觉效果。 4. **事件处理**:RichFaces支持JSF的生命周期事件,包括初始化、提交、验证等,并提供了...

    myfaces API

    myfaces API的灵活性体现在其可扩展性上,开发者可以自定义组件、渲染器、EL函数,甚至可以扩展生命周期阶段。此外,myfaces API与其他开源库如Tomahawk、RichFaces等结合使用,可以构建出功能更加强大的Web应用程序...

    richfaces-4.0.0.Final

    RichFaces的皮肤和主题系统允许开发者自定义组件的外观,适应不同的品牌风格。4.0.0.Final版本引入了更多预设的主题,如Aqua、GlassX和Moon,同时也支持自定义主题,使得UI设计更加灵活多样。 四、事件处理 ...

    richfaces_usersguide 3.3

    对于采用Sun JSF参考实现或Apache MyFaces的项目,指南详细阐述了如何针对这两种框架进行优化设置,确保RichFaces组件的高效运行。 ### 3. Facelets与JBoss Seam支持 此外,Facelets模板引擎和JBoss Seam框架的集成...

    richfaces-ui-3.1.0-bin

    RichFaces是一个基于Apache licensed的开源项目,它是Apache MyFaces的扩展,专注于提供丰富的JavaScript组件和Ajax功能。RichFaces 3.1.0是该框架的一个重要里程碑,它集成了AJAX技术,显著提升了Web应用的用户体验...

    RichFaces3.4

    3. **Apache MyFaces**:对于 Apache MyFaces,需要特别注意与 RichFaces 的集成问题,以确保组件能够正常工作。 4. **Facelets 支持**:Facelets 是一种视图技术,可以与 JSF 结合使用,提供更灵活的页面布局方式...

    richfaces_reference.pdf

    RichFaces是一款功能强大的开源JavaScript库与Java Server Faces (JSF) 集成的组件库,它提供了丰富的用户界面组件以及Ajax支持,大大简化了Web应用程序的开发过程。此文档旨在详细介绍RichFaces 3.3.3版本的功能...

    richfaces-ui-3.2.1.GA-bin.zip

    首先,RichFaces框架是基于Apache MyFaces JSF(JavaServer Faces)的组件库,它的主要目标是简化富客户端应用的开发。在3.2.1.GA版本中,它包含了丰富的UI组件和事件处理机制,能够帮助开发者创建功能丰富、用户...

    richfaces_reference

    手册介绍了RichFaces的皮肤机制,包括为何需要皮肤支持、如何使用、示例展示、参数表格、自定义皮肤文件的创建与使用、内置皮肤功能、标准控件的皮肤化、客户端脚本扩展、XCSS文件格式和Plug-n-Skin机制,全面展示了...

Global site tag (gtag.js) - Google Analytics