`
elicer
  • 浏览: 133329 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

基于 Sun JSF 的 PanelHorizontalLayout,tablelayout , rowlayout , cellformat的实现

    博客分类:
  • JSF
阅读更多
BaseRender

import java.io.IOException;

import javax.faces.component.UIComponent;
import javax.faces.context.ResponseWriter;
import javax.faces.render.Renderer;

public abstract class BaseRender extends Renderer {
	abstract boolean needSpecialAttribute();
	abstract void writeSpecialAttributes(UIComponent component,
			ResponseWriter writer)throws IOException;
	protected void writeCommonAttributes(UIComponent component,
			ResponseWriter writer, String clientId) throws IOException {
		
		String width = (String) component.getAttributes().get(HtmlElement.WIDTH);
		String height = (String) component.getAttributes().get(HtmlElement.HEIGHT);
		String styleClass = (String) component.getAttributes()
				.get(HtmlElement.STYLECLASS);
		String inlineStyle = (String) component.getAttributes().get(HtmlElement.INLINESTYLE);
		writer.writeAttribute(HtmlElement.ID,clientId, null);
		if (width != null) {
			writer.writeAttribute(HtmlElement.WIDTH, width, null);
		}
		if (height != null) {
			writer.writeAttribute(HtmlElement.HEIGHT, height, null);
		}

		if (inlineStyle != null) {
			writer.writeAttribute(HtmlElement.STYLE, inlineStyle, null);
		}
		if (styleClass != null) {
			writer.writeAttribute(HtmlElement.CLASS, styleClass, null);
		}
        if (needSpecialAttribute()) {
        	writeSpecialAttributes(component,writer);
        }
	}
}





TableLayoutRenderClass
import java.io.IOException;
import java.util.List;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;

public class TableLayoutRenderer extends BaseRender {
	public void encodeBegin(FacesContext context, UIComponent component)
			throws IOException {
		ResponseWriter writer = context.getResponseWriter();
		String clientId = component.getClientId(context);
		writer.startElement("table", component);
		writeCommonAttributes(component, writer, clientId);
		//encodeRow(context,component, writer, clientId);
		//encodeCommand(component, writer, clientId);
	}
   public void encodeEnd(FacesContext context, UIComponent component)throws IOException {
	   try {
		context.getResponseWriter().endElement("table");
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
   }
    public void encodeChildren(FacesContext context, UIComponent component)
    throws IOException
   {
 	   for(UIComponent child : (List<UIComponent>)component.getChildren()) {

	   try {
			if (child instanceof HtmlRowLayout)   { 
			   //super.encodeChildren(context, child);
				child.encodeBegin(context);
				child.encodeChildren(context);
				child.encodeEnd(context);
			
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	   }
   }

	@Override
	boolean needSpecialAttribute() {
		// TODO Auto-generated method stub
		return false;
	}
	@Override
	void writeSpecialAttributes(UIComponent component, ResponseWriter writer)
			throws IOException {
		// TODO Auto-generated method stub
		
	}

}



HtmlTableLayOut ComponentClass


package com.test.jsftest;

import javax.faces.component.UIPanel;

public class HtmlTableLayout extends UIPanel {
	public HtmlTableLayout() {
		setRendererType("com.test.jsftest.HtmlTableLayout");
		}

}






RowLayout Render Class
import java.io.IOException;
import java.util.List;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;

public class RowLayoutRenderer extends BaseRender {
	public void encodeBegin(FacesContext context, UIComponent component)
			throws IOException {
		ResponseWriter writer = context.getResponseWriter();		
		String clientId = component.getClientId(context);
		writer.startElement("tr", component);
		writeCommonAttributes(component, writer, clientId);
		//encodeRow(context,component, writer, clientId);
		
	}
    public void encodeChildren(FacesContext context, UIComponent component)
    throws IOException
   {
 	   try{
 		   for(UIComponent child : (List<UIComponent>)component.getChildren()) {
 			    if (child instanceof HtmlCellFormat)
 			    {
 			    	//super.encodeChildren(context, child);
 					child.encodeBegin(context);
 					child.encodeChildren(context);
 					child.encodeEnd(context);
 			    }
// 			    else
// 			    {
// 			      ResponseWriter rw = context.getResponseWriter();
// 			      rw.startElement("td", null);
// 			      super.encodeChildren(context, child);
// 			      rw.endElement("td");
// 			    }
 			   }

 		   }catch(Exception e) {
 			   
 		   }
   }
	   public void encodeEnd(FacesContext context, UIComponent component) {
		   try {
			context.getResponseWriter().endElement("tr");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	   }

	@Override
	boolean needSpecialAttribute() {
		// TODO Auto-generated method stub
		return false;
	}
	@Override
	void writeSpecialAttributes(UIComponent component, ResponseWriter writer)
			throws IOException {
		// TODO Auto-generated method stub
		
	}
 
	   
	   
	   

  
}






RowLayout  Component Class

package com.test.jsftest;

import javax.faces.component.UIPanel;

public class HtmlRowLayout extends UIPanel {
	public HtmlRowLayout() {
		setRendererType("com.test.jsftest.HtmlRowLayout");
		}
}



CellFormat Render Class




import java.io.IOException;
import java.util.List;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;

public class CellFormatRenderer extends BaseRender {
	public void encodeBegin(FacesContext context, UIComponent component)
			throws IOException {
		ResponseWriter writer = context.getResponseWriter();
		String clientId = component.getClientId(context);
		writer.startElement("td", component);
		writeCommonAttributes(component, writer, clientId);
		//encodeCell(context,component, writer, clientId);
		//encodeCommand(component, writer, clientId);
	}

	   public void encodeEnd(FacesContext context, UIComponent component) {
		   try {
			context.getResponseWriter().endElement("td");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	   }
	    public void encodeChildren(FacesContext context, UIComponent component)
	    throws IOException
	   {
	 	   for(UIComponent child : (List<UIComponent>)component.getChildren()) {
			   if (child.isRendered()) {
				   try {
					//super.encodeChildren(context, child);
						child.encodeBegin(context);
						child.encodeChildren(context);
						child.encodeEnd(context);
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			   }
		   }
	   }   


	@Override
	boolean needSpecialAttribute() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	void writeSpecialAttributes(UIComponent component, ResponseWriter writer)
			throws IOException {
		// TODO Auto-generated method stub
		
	}

}


CellFormatComponent Class

package com.test.jsftest;

import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.faces.component.UIComponent;
import javax.faces.component.UIPanel;
import javax.faces.context.FacesContext;
import javax.faces.el.ValueBinding;
import javax.faces.event.AbortProcessingException;
import javax.faces.event.FacesEvent;
import javax.faces.event.FacesListener;
import javax.faces.render.Renderer;

public class HtmlCellFormat extends UIPanel {

	public HtmlCellFormat() {
		setRendererType("com.test.jsftest.HtmlCellFormat");
		}

}




PanelHorizontalLayout Class



import java.io.IOException;
import java.util.List;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;

public class PanelHorizontalLayoutRender extends BaseRender {
	
    public boolean getRendersChildren()
    {
        return true;
    }
	public void encodeBegin(FacesContext context, UIComponent component)
			throws IOException {
		ResponseWriter writer = context.getResponseWriter();
		String clientId = component.getClientId(context);
		
		writer.startElement("table", component);
		writeCommonAttributes(component, writer, clientId);
		writer.startElement("tr", component);
		//encodeAttribute(context, component, writer, clientId);
		
		encodeChild(context, writer, component);
		
		//context.getResponseWriter().endElement("tr");
		//context.getResponseWriter().endElement("table");
		// encodeCommand(component, writer, clientId);
	}

	public void encodeEnd(FacesContext context, UIComponent component)
			throws IOException {
		try {
			
			context.getResponseWriter().endElement("tr");
			context.getResponseWriter().endElement("table");
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public void encodeChildren(FacesContext context, UIComponent component)
			throws IOException {

	}


	
	private void encodeChild(FacesContext context, ResponseWriter writer, UIComponent component) throws IOException {
		for (UIComponent child : (List<UIComponent>) component.getChildren()) {
            
			
			if (child instanceof HtmlCellFormat) {
				child.encodeBegin(context);
				child.encodeChildren(context);
				child.encodeEnd(context);
			}else {
				writer.startElement("td", component);
				
					// super.encodeChildren(context, child);
					child.encodeBegin(context);
					child.encodeChildren(context);
					child.encodeEnd(context);
		        writer.endElement("td");
			}
			
			}
	}
	@Override
	boolean needSpecialAttribute() {
		// TODO Auto-generated method stub
		return true;
	}
	@Override
	void writeSpecialAttributes(UIComponent component, ResponseWriter writer) throws IOException {
		// TODO Auto-generated method stub
		String vAlign = (String) component.getAttributes().get("vAlign");
		String hAlign = (String) component.getAttributes().get("hAlign");
		if (vAlign != null) {
			writer.writeAttribute("vAlign", vAlign, null);
		}
		if (hAlign != null) {
			writer.writeAttribute("align", hAlign, null);
		}
	}
}





PanelGroupLayout
import java.io.IOException;
import java.util.List;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;

public class PanelGroupLayoutRender extends BaseRender {
	private static final String HORIZONTAL_LAY_OUT = "Horizontal";
	private static final String VERTICAL_LAY_OUT = "Vertical";
	
    public boolean getRendersChildren()
    {
        return true;
    }
	public void encodeBegin(FacesContext context, UIComponent component)
			throws IOException {
		ResponseWriter writer = context.getResponseWriter();
		String clientId = component.getClientId(context);
		
		writer.startElement("table", component);
		writeCommonAttributes(component,writer,clientId);
		
		encodeChild(context, writer, component);
		

	}

	public void encodeEnd(FacesContext context, UIComponent component)
			throws IOException {
		try {
			
			
			context.getResponseWriter().endElement("table");
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public void encodeChildren(FacesContext context, UIComponent component)
			throws IOException {

		
	}


	
	private void encodeChild(FacesContext context, ResponseWriter writer, UIComponent component) throws IOException {
		
		String layoutType = (String) component.getAttributes().get("layout");
		if (layoutType == null || HORIZONTAL_LAY_OUT.equals(layoutType))  {
			writer.startElement("tr", component);
			for (UIComponent child : (List<UIComponent>) component.getChildren()) {
	            
				
				if (child instanceof HtmlCellFormat) {
					child.encodeBegin(context);
					child.encodeChildren(context);
					child.encodeEnd(context);
				}else {
					writer.startElement("td", component);
					
						// super.encodeChildren(context, child);
						child.encodeBegin(context);
						child.encodeChildren(context);
						child.encodeEnd(context);
			        writer.endElement("td");
				}
				
				}
			writer.endElement("tr");
		}else if (VERTICAL_LAY_OUT.equals(layoutType)) {
			
			
			for (UIComponent child : (List<UIComponent>) component.getChildren()) {
				writer.startElement("tr",component);
				
				if (child instanceof HtmlCellFormat) {
					child.encodeBegin(context);
					child.encodeChildren(context);
					child.encodeEnd(context);
				}else {
					
					  writer.startElement("td",component);
						// super.encodeChildren(context, child);
						child.encodeBegin(context);
						child.encodeChildren(context);
						child.encodeEnd(context);
						writer.endElement("td");
			       
				}
				writer.endElement("tr");
				
				}
			
		}
		

	}
	@Override
	boolean needSpecialAttribute() {
		// TODO Auto-generated method stub
		return false;
	}
	@Override
	void writeSpecialAttributes(UIComponent component, ResponseWriter writer) {
		// TODO Auto-generated method stub
		
	}
}







Faces-config.xml






<?xml version="1.0"?>
<!DOCTYPE faces-config PUBLIC
  "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN"
  "http://java.sun.com/dtd/web-facesconfig_1_0.dtd">

<faces-config>
	<application>
		<!-- Enables Facelets -->
		<view-handler>com.sun.facelets.FaceletViewHandler</view-handler>  
	</application>
	
   <component>
		<component-type>
		com.test.jsftest.TextWithCmd
		</component-type>
		<component-class>
		com.test.jsftest.UITextWithCmd
		</component-class>
	</component>
	 <component>
		<component-type>
		com.test.jsftest.HtmlCellFormat
		</component-type>
		<component-class>
		com.test.jsftest.HtmlCellFormat
		</component-class>
	</component>
	<component>
		<component-type>
		com.test.jsftest.HtmlRowLayout
		</component-type>
		<component-class>
		com.test.jsftest.HtmlRowLayout
		</component-class>
	</component>

	<component>
		<component-type>
		com.test.jsftest.HtmlTableLayout
		</component-type>
		<component-class>
		com.test.jsftest.HtmlTableLayout
		</component-class>
	</component>
		<render-kit>
		<renderer>
		<component-family>
		javax.faces.Panel
		</component-family>
		<renderer-type>
		com.test.jsftest.HtmlCellFormat
		</renderer-type>
		<renderer-class>
		com.test.jsftest.CellFormatRenderer
		</renderer-class>
		</renderer>
	
		<renderer>
		<component-family>
		javax.faces.Panel
		</component-family>
		<renderer-type>
		com.test.jsftest.HtmlRowLayout
		</renderer-type>
		<renderer-class>
		com.test.jsftest.RowLayoutRenderer
		</renderer-class>
		</renderer>
		
		<renderer>
		<component-family>
		javax.faces.Panel
		</component-family>
		<renderer-type>
		com.test.jsftest.HtmlTableLayout
		</renderer-type>
		<renderer-class>
		com.test.jsftest.TableLayoutRenderer
		</renderer-class>
		</renderer>	
		
		<renderer>
		<component-family>
		javax.faces.Input
		</component-family>
		<renderer-type>
		com.test.jsftest.TextCmd
		</renderer-type>
		<renderer-class>
		com.test.jsftest.TextCmdRenderer
		</renderer-class>
		</renderer>
		</render-kit>
</faces-config>




taglib.xml
<?xml version="1.0" encoding="utf-8"?>
<!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 xmlns="http://java.sun.com/JSF/Facelet">
  
  <namespace>http://caterpillar.onlyfun.net/custimizedtag</namespace>
	<tag>
		<tag-name>textcmd</tag-name>
		<component>
			<component-type>
				com.test.jsftest.TextWithCmd
			</component-type>
			<renderer-type>
				com.test.jsftest.TextCmd
			</renderer-type>
		</component>
	</tag>
 
	<tag>
		<tag-name>cellFormat</tag-name>
		<component>
			<component-type>
				com.test.jsftest.HtmlCellFormat
			</component-type>
			<renderer-type>
				com.test.jsftest.HtmlCellFormat
			</renderer-type>
		</component>
	</tag>
  
  	<tag>
		<tag-name>RowLayout</tag-name>
		<component>
			<component-type>
				com.test.jsftest.HtmlRowLayout
			</component-type>
			<renderer-type>
				com.test.jsftest.HtmlRowLayout
			</renderer-type>
		</component>
	</tag>
	
	
		<tag>
		<tag-name>TableLayout</tag-name>
		<component>
			<component-type>
				com.test.jsftest.HtmlTableLayout
			</component-type>
			<renderer-type>
				com.test.jsftest.HtmlTableLayout
			</renderer-type>
		</component>
	</tag>
</facelet-taglib>





分享到:
评论

相关推荐

    sun的jsf接口和实现的源文件下载

    Sun Microsystems(后来被Oracle收购)是JSF规范的主要推动者和实现者。在这个压缩包中,你获得了JSF 1.2版本的源代码,这是JSF发展的一个早期版本,对于学习和理解JSF的工作原理非常有帮助。 JSF的核心概念包括...

    sun jsf第一个程序

    本教程将深入讲解如何通过JSF实现一个简单的登录程序,这是初学者接触JSF时的典型起点。 在JSF中,我们通常会使用XML配置文件(faces-config.xml)来定义应用程序组件和导航规则,以及Java类(如Managed Beans)来...

    JSF标准的两个实现

    **JSF标准的两个实现** JavaServer Faces (JSF) 是Java平台上的一个用于构建用户界面的MVC(Model-View-Controller)框架,它为Web应用开发提供了一种组件化的方法。JSF规范定义了API和事件模型,而具体的实现则由...

    jsf实现登录功能

    在这个"jsf实现登录功能"的例子中,我们将探讨如何利用JSF来构建一个基本的用户登录系统。 首先,登录功能通常包括两部分:前端页面和后端逻辑。在JSF中,前端页面通常由XHTML文件(.xhtml)组成,这些文件结合了...

    JSF1.2+EJB3实现的一个项目实例

    jsf1.2+ejb3.0实现的员工管理系统,做成了部分:一部分是ejb端,实现业务逻辑;另一部分是web端,实现web浏览。通过这个实例,你可以学会用jsf1.2和ejb3去做企业项目。内附源代码、分析和部署文档。

    基于JSF+EJB+JPA实现的酒店预订系统.7z

    【标题】"基于JSF+EJB+JPA实现的酒店预订系统"是一个综合性的Java Web应用,使用了三种核心技术:JavaServer Faces (JSF),Enterprise JavaBeans (EJB) 和 Java Persistence API (JPA)。这个系统旨在为用户提供一个...

    用jsf做的登录注册的组件

    这可以通过在Bean中定义验证方法或者使用JSF提供的Validator接口实现。 5. **会话管理**:在登录成功后,通常会将用户信息保存在session中,以便后续页面访问时能识别用户身份。JSF提供了`FacesContext`对象来操作...

    JSF+hibernate实现批量删除

    JSF是一个基于组件的MVC(Model-View-Controller)框架,它允许开发者通过声明式的方式处理用户界面和业务逻辑。JSF组件库提供了一系列预定义的UI组件,如按钮、表单、列表等,这些组件可以直接在页面上使用,与后端...

    Sun_JSF2AndAjax.pdf

    《Sun_JSF2AndAjax.pdf》这份文档深入探讨了JavaServer Faces(JSF)2.0框架中Ajax技术的应用与实践,提供了丰富的示例和技巧,帮助开发者理解和掌握在现代Web应用中如何高效地结合JSF与Ajax。 #### JSF与Ajax基础 ...

    基于JSF+EJB3+JPA的竞价拍卖系统

    **基于JSF+EJB3+JPA的竞价拍卖系统** 在IT行业中,开发一个拍卖系统是一项复杂的任务,它需要高效、稳定且用户友好的技术栈。"基于JSF+EJB3+JPA的竞价拍卖系统"是利用Java企业级技术构建的这样一个系统,主要依赖于...

    JSF文件下载实现

    **JSF 文件下载实现** 在JavaServer Faces (JSF)框架中,实现文件下载功能是一项常见的需求。在本文中,我们将深入探讨如何使用JSF来实现在Web应用程序中下载文件的功能。主要涉及的关键知识点包括: 1. **JSF上...

    基于JSF全注解框架

    在这个“基于JSF全注解框架”的项目中,我们将深入探讨如何利用注解进行JSF开发,以提高代码的可读性和可维护性。 1. **JSF与注解** 在传统的JSF开发中,开发者通常会使用XML配置文件来定义组件、导航规则等。...

    JSF2.0与Ajax交互实现.pdf

    1. **JSF 2.0**: JavaServer Faces (JSF) 是一个用于构建基于组件的用户界面的标准Java框架。JSF 2.0是JSF的一个重大更新版本,提供了更简洁的API、增强的功能以及对Ajax的支持等改进。 2. **Ajax**: Asynchronous...

    经典JAVA EE企业应用实战基于WEBLOGIC JBOSS的JSF+EJB 3+JPA整合开发——源码.part1

    经典JAVA EE企业应用实战基于WEBLOGIC JBOSS的JSF+EJB 3+JPA整合开发——源码.part1 其他部分详见我的上传列表,全部分卷下载完成才能解压。 本书介绍了Java EE规范的三大主要规范JSF、EJB 3和JPA,其中JSF是Sun...

    基于JSF的问卷调查系统

    **基于JSF的问卷调查系统** JavaServer Faces (JSF) 是Java EE平台中的一个用于构建用户界面的组件模型框架,特别适用于开发企业级Web应用。JSF提供了一种声明式的方式来创建用户界面,允许开发者通过XML(XHTML)...

    poi读取并导出excel(jsf bean 页面的实现)

    POI读取并导出Excel(JSF Bean 页面的实现) 概述 本文将介绍如何使用POI库在JSF Bean页面中读取和导出Excel文件。通过该实现,可以实现下载地址的可选性,而不是写死的固定地址。 相关知识点 1. POI库的使用:...

    一种新的基于JSF技术的Web用户界面开发方法.pdf

    ### 基于JSF技术的Web用户界面开发方法 #### 引言 随着互联网的飞速发展,Web用户界面的开发变得日益重要。在Java技术领域,虽然J2EE平台提供了诸如JSP 2.0、Servlet 2.4、JSTL 1.0和Struts 1.1等成熟的Web开发...

    基于jsf+spring+hibernate+ajax的网络文件管理系统

    本系统是基于jsf+spring+hibernate+ajax实现的一个网络文件管理系统.运行环境 WEB服务:TOMCAT6 数据库:SQLSERVER2005 JDK1.4以上 本系统采用了基于角色的权限管理

    JSF中使用BooleanCheckbox实现全选功能

    在JavaServer Faces (JSF)框架中,实现全选功能通常是通过使用BooleanCheckbox组件来完成的。这篇博客文章“JSF中使用BooleanCheckbox实现全选功能”可能详细讲解了如何利用这种组件在用户界面中创建一个可以勾选的...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    《经典Java EE企业应用实战:基于WebLogic/JBoss的JSF+EJB 3+JPA整合开发》介绍了Java EE规范的三大主要规范JSF、EJB 3和JPA,其中JSF是Sun公司提供的JSF RI;EJB 3部分则包含Session Bean、Message Driven Bean的...

Global site tag (gtag.js) - Google Analytics