📄 tabbedpane2renderer.java
字号:
/*
* Fixed Bug: A user clicked sub-menu item, but GUI appeared wrong page.
*/
package com.cim.jsf.component.tabbedPane2;
import java.io.IOException;
import java.text.MessageFormat;
import java.util.Iterator;
import java.util.List;
import java.util.ResourceBundle;
import javax.faces.component.UIComponent;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
import javax.faces.render.Renderer;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import com.cim.jsf.model.TabNode;
import com.cim.jsf.servlet.Resource;
import com.cim.jsf.util.Messages;
import com.cim.jsf.util.RendererUtil;
public class TabbedPane2Renderer
extends Renderer {
public final static String TAIL_CURRENT_TAB = "_currentTab";
private final static String TAIL_JS_OBJECT = "_obj";
private final static String TAIL_ID_FORM = "_formID";
private final static String TAIL_ID_ITEM = "_itemID";
private final static String TAIL_ID_ARROW = "_arrowID";
private final static String TAIL_ID_ITEMS = "_itemsID";
final static private String PATHFILE_TAB_LEFT = "images/tabl.gif";
final static private String PATHFILE_TAB_LEFT_CURRENT = "images/tabl_cur.gif";
final static private String PATHFILE_TAB_RIGHT = "images/tabr.gif";
final static private String PATHFILE_TAB_RIGHT_CURRENT = "images/tabr_cur.gif";
final static private String PATHFILE_TAB_ARROW_DN = "images/arrowdn.gif";
final static private String PATHFILE_CSS = "css/tabbedPane.css";
final static private String PATHFILE_JS = "js/tabbedPane.js";
/**
* redersChildren
*
* @return boolean
*/
public boolean getRendersChildren() {
return true;
}
public void encodeBegin( FacesContext context, UIComponent component ) throws
IOException {
ResponseWriter writer = context.getResponseWriter();
// encode header
encodeHeader( context );
//
writer.write("\n");
writer.startElement( "table", component );
writer.writeAttribute( "width", "100%", "width" );
writer.writeAttribute( "cellpadding", "0", "cellpadding" );
writer.writeAttribute( "cellspacing", "1", "cellspacing" );
writer.writeAttribute( "border", "0", "border" );
}
/**
* encodeChildren
*
* @param context FacesContext
* @param component UIComponent
*/
public void encodeChildren( FacesContext context, UIComponent component ) throws
IOException {
UITabbedPane2 uiTabbedPane2 = ( UITabbedPane2 )component;
TabNode node = ( TabNode )uiTabbedPane2.getValue();
//
ResponseWriter writer = context.getResponseWriter();
writer.write("\n");
writer.startElement( "tr", component );
writer.write("\n");
writer.startElement( "td", component );
writer.write("\n");
writer.startElement( "table", component );
writer.writeAttribute( "width", "100%", "width" );
writer.writeAttribute( "cellpadding", "0", "cellpadding" );
writer.writeAttribute( "cellspacing", "0", "cellspacing" );
writer.writeAttribute( "border", "0", "border" );
writer.write("\n");
writer.startElement( "tr", component );
//
Iterator itNode = node.getChildren().iterator();
while ( itNode.hasNext() ) {
TabNode tab = ( TabNode )itNode.next();
encodeTab( context, writer, tab, component );
}
//
writer.write("\n");
writer.startElement( "td", component );
writer.writeAttribute( "width", "95%", "width" );
writer.writeAttribute( "align", "right", "align" );
writer.writeAttribute( "class", "tabnone", "class" );
writer.write( " " );
writer.endElement( "td" );
writer.write( "\n" ); // to make generated HTML easier to read
//
writer.endElement( "tr" );
writer.endElement( "table" );
writer.endElement( "td" );
writer.endElement( "tr" );
}
public void encodeEnd( FacesContext context, UIComponent component ) throws
IOException {
ResponseWriter writer = context.getResponseWriter();
//
writer.write("\n");
writer.startElement( "tr", component );
writer.write("\n");
writer.startElement( "td", component );
//
RendererUtil.renderChildren( context, component );
//
writer.write("\n");
writer.endElement( "td" );
writer.endElement( "tr" );
// Close off the column, row, and table elements
writer.write("\n");
writer.endElement( "table" );
}
private void encodeHeader( FacesContext context )
throws IOException {
ResponseWriter writer = context.getResponseWriter();
String cssHeader = Resource.getHeader( context, this.getClass(),
PATHFILE_CSS );
String jsHeader = Resource.getHeader( context, this.getClass(),
PATHFILE_JS );
writer.write("\n");
writer.write( cssHeader );
writer.write("\n");
writer.write( jsHeader );
writer.write("\n");
}
/**
* encodeTab
*
* @param context FacesContext
* @param writer ResponseWriter
* @param tabItem TabItem
* @param component UIComponent
*/
public void encodeTab( FacesContext context, ResponseWriter writer,
TabNode tab, UIComponent component ) throws
IOException {
UITabbedPane2 uiTabbedPane2 = ( UITabbedPane2 )component;
String name = tab.getName();
boolean hasChildren = tab.hasChildren();
boolean isDisabled = tab.isDisabled();
//
String currentTabName = uiTabbedPane2.getCurrentTabName();
if ( currentTabName == null ) {
if ( isDisabled ) {
uiTabbedPane2.setCurrentTab( null );
tab.setCurrentTab( false );
} else {
uiTabbedPane2.setCurrentTabName( name );
uiTabbedPane2.setCurrentTab( tab );
tab.setCurrentTab( true );
}
} else {
TabNode currentTab = findCurrentTab( currentTabName, tab );
if ( currentTab != null ) {
uiTabbedPane2.setCurrentTab( currentTab );
tab.setCurrentTab( true );
} else {
tab.setCurrentTab( false );
}
}
boolean isCurrentTab = tab.isCurrentTab();
//
final String imgTabLeft = Resource.getResourceString( context,
this.getClass(), PATHFILE_TAB_LEFT );
final String imgTabLeftCurrent = Resource.getResourceString( context,
this.getClass(), PATHFILE_TAB_LEFT_CURRENT );
final String imgTabRight = Resource.getResourceString( context,
this.getClass(), PATHFILE_TAB_RIGHT );
final String imgTabRightCurrent = Resource.getResourceString( context,
this.getClass(), PATHFILE_TAB_RIGHT_CURRENT );
//
writer.write("\n");
writer.startElement( "td", component );
writer.write("\n");
writer.startElement( "img", component );
writer.writeAttribute( "src", ( isCurrentTab ? imgTabLeftCurrent : imgTabLeft ), null );
writer.writeAttribute( "alt", "", null );
writer.endElement( "img" );
writer.endElement( "td" );
//
writer.write("\n");
writer.startElement( "td", component );
writer.writeAttribute( "class", ( isCurrentTab ? "curBtn" : "tabBtn" ), null );
if ( hasChildren ) {
encodeTabSelect( context, component, tab );
} else {
encodeTabButton( context, component, tab );
}
writer.endElement( "td" );
//
writer.write("\n");
writer.startElement( "td", component );
writer.write("\n");
writer.startElement( "img", component );
writer.writeAttribute( "src", ( isCurrentTab ? imgTabRightCurrent : imgTabRight ), null );
writer.writeAttribute( "alt", "", null );
writer.endElement( "img" );
writer.endElement( "td" );
}
private TabNode findCurrentTab( String currentTabName, TabNode tab ) {
String name = tab.getName();
if ( currentTabName.equals( name ) ) {
return tab;
}
Iterator itChildren = tab.getChildren().iterator();
while ( itChildren.hasNext() ) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -