浏览 1609 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-07-20
最后修改:2009-11-26
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> 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |