亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? abstractrenderer.java

?? struts的源代碼
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:
/*
 * Copyright 2002,2004 The Apache Software Foundation.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.apache.struts.faces.renderer;


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

import javax.faces.application.FacesMessage;
import javax.faces.component.EditableValueHolder;
import javax.faces.component.UIComponent;
import javax.faces.component.ValueHolder;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
import javax.faces.convert.Converter;
import javax.faces.convert.ConverterException;
import javax.faces.el.ValueBinding;
import javax.faces.render.Renderer;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;


/**
 * <p>Abstract base class for concrete implementations of
 * <code>javax.faces.render.Renderer</code> for the
 * <em>Struts-Faces Integration Library</em>.</p>
 *
 * @version $Rev: 54934 $ $Date: 2004-10-16 18:07:50 +0100 (Sat, 16 Oct 2004) $
 */

public abstract class AbstractRenderer extends Renderer {


    // -------------------------------------------------------- Static Variables


    private static final Log log =
	LogFactory.getLog(AbstractRenderer.class);


    // -------------------------------------------------------- Renderer Methods


    /**
     * <p>Decode any new state of the specified <code>UIComponent</code>
     * from the request contained in the specified <code>FacesContext</code>,
     * and store that state on the <code>UIComponent</code>.</p>
     *
     * <p>The default implementation calls <code>setSubmittedValue()</code>
     * unless this component has a boolean <code>disabled</code> or
     * <code>readonly</code> attribute that is set to <code>true</code>.</p>
     *
     * @param context <code>FacesContext</code> for the current request
     * @param component <code>UIComponent</code> to be decoded
     *
     * @exception NullPointerException if <code>context</code> or
     *  <code>component</code> is <code>null</code>
     */
    public void decode(FacesContext context, UIComponent component) {

        // Enforce NPE requirements in the Javadocs
        if ((context == null) || (component == null)) {
            throw new NullPointerException();
        }

        // Disabled or readonly components are not decoded
        if (isDisabled(component) || isReadOnly(component)) {
            return;
        }

        // Save submitted value on EditableValueHolder components
        if (component instanceof EditableValueHolder) {
            setSubmittedValue(context, component);
        }
        
    }


    /**
     * <p>Render the beginning of the specified <code>UIComponent</code>
     * to the output stream or writer associated with the response we are
     * creating.</p>
     *
     * <p>The default implementation calls <code>renderStart()</code> and
     * <code>renderAttributes()</code>.</p>
     *
     * @param context <code>FacesContext</code> for the current request
     * @param component <code>UIComponent</code> to be decoded
     *
     * @exception NullPointerException if <code>context</code> or
     *  <code>component</code> is <code>null</code>
     *
     * @exception IOException if an input/output error occurs
     */
    public void encodeBegin(FacesContext context, UIComponent component)
        throws IOException {

        // Enforce NPE requirements in the Javadocs
        if ((context == null) || (component == null)) {
            throw new NullPointerException();
        }

	if (log.isTraceEnabled()) {
	    log.trace("encodeBegin(id=" + component.getId() +
		      ", family=" + component.getFamily() +
		      ", rendererType=" + component.getRendererType() + ")");
	}

        // Render the element and attributes for this component
        ResponseWriter writer = context.getResponseWriter();
        renderStart(context, component, writer);
        renderAttributes(context, component, writer);

    }


    /**
     * <p>Render the children of the specified <code>UIComponent</code>
     * to the output stream or writer associated with the response we are
     * creating.</p>
     *
     * <p>The default implementation iterates through the children of
     * this component and renders them.</p>
     *
     * @param context <code>FacesContext</code> for the current request
     * @param component <code>UIComponent</code> to be decoded
     *
     * @exception NullPointerException if <code>context</code> or
     *  <code>component</code> is <code>null</code>
     *
     * @exception IOException if an input/output error occurs
     */
    public void encodeChildren(FacesContext context, UIComponent component)
        throws IOException {

        if (context == null || component == null) {
            throw new NullPointerException();
        }

	if (log.isTraceEnabled()) {
	    log.trace("encodeChildren(id=" + component.getId() +
		      ", family=" + component.getFamily() +
		      ", rendererType=" + component.getRendererType() + ")");
	}
	Iterator kids = component.getChildren().iterator();
	while (kids.hasNext()) {
	    UIComponent kid = (UIComponent) kids.next();
	    kid.encodeBegin(context);
	    if (kid.getRendersChildren()) {
		kid.encodeChildren(context);
	    }
	    kid.encodeEnd(context);
	}
	if (log.isTraceEnabled()) {
	    log.trace("encodeChildren(id=" + component.getId() + ") end");
	}

    }


    /**
     * <p>Render the ending of the specified <code>UIComponent</code>
     * to the output stream or writer associated with the response we are
     * creating.</p>
     *
     * <p>The default implementation calls <code>renderEnd()</code>.</p>
     *
     * @param context <code>FacesContext</code> for the current request
     * @param component <code>UIComponent</code> to be decoded
     *
     * @exception NullPointerException if <code>context</code> or
     *  <code>component</code> is <code>null</code>
     *
     * @exception IOException if an input/output error occurs
     */
    public void encodeEnd(FacesContext context, UIComponent component)
        throws IOException {

        // Enforce NPE requirements in the Javadocs
        if ((context == null) || (component == null)) {
            throw new NullPointerException();
        }

	if (log.isTraceEnabled()) {
	    log.trace("encodeEnd(id=" + component.getId() +
		      ", family=" + component.getFamily() +
		      ", rendererType=" + component.getRendererType() + ")");
	}

        // Render the element closing for this component
        ResponseWriter writer = context.getResponseWriter();
        renderEnd(context, component, writer);

    }


    // --------------------------------------------------------- Package Methods


    // ------------------------------------------------------- Protected Methods


    /**
     * <p>Render nested child components by invoking the encode methods
     * on those components, but only when the <code>rendered</code>
     * property is <code>true</code>.</p>
     */
    protected void encodeRecursive(FacesContext context, UIComponent component)
        throws IOException {

        // suppress rendering if "rendered" property on the component is
        // false.
        if (!component.isRendered()) {
            return;
        }

        // Render this component and its children recursively
	if (log.isTraceEnabled()) {
	    log.trace("encodeRecursive(id=" + component.getId() +
		      ", family=" + component.getFamily() +
		      ", rendererType=" + component.getRendererType() +
		      ") encodeBegin");
	}
        component.encodeBegin(context);
        if (component.getRendersChildren()) {
	    if (log.isTraceEnabled()) {
		log.trace("encodeRecursive(id=" + component.getId() +
			  ") delegating");
	    }
            component.encodeChildren(context);
        } else {
	    if (log.isTraceEnabled()) {
		log.trace("encodeRecursive(id=" + component.getId() +
			  ") recursing");
	    }
            Iterator kids = component.getChildren().iterator();
            while (kids.hasNext()) {
                UIComponent kid = (UIComponent) kids.next();
                encodeRecursive(context, kid);
            }
        }
	if (log.isTraceEnabled()) {
	    log.trace("encodeRecursive(id=" + component.getId() + ") encodeEnd");
	}
        component.encodeEnd(context);

    }


    /**
     * <p>Return <code>true</code> if the specified component is disabled.</p>
     *
     * @param component <code>UIComponent</code> to be checked
     */
    protected boolean isDisabled(UIComponent component) {

        Object disabled = component.getAttributes().get("disabled");
        if (disabled == null) {
            return (false);
        }
        if (disabled instanceof String) {
            return (Boolean.valueOf((String) disabled).booleanValue());
        } else {
            return (disabled.equals(Boolean.TRUE));
        }

    }


    /**
     * <p>Return <code>true</code> if the specified component is read only.</p>
     *
     * @param component <code>UIComponent</code> to be checked
     */
    protected boolean isReadOnly(UIComponent component) {

        Object readonly = component.getAttributes().get("readonly");
        if (readonly == null) {
            return (false);
        }
        if (readonly instanceof String) {
            return (Boolean.valueOf((String) readonly).booleanValue());
        } else {
            return (readonly.equals(Boolean.TRUE));
        }

    }


    /**
     * <p>Render the element attributes for the generated markup related to this
     * component.  Simple renderers that create a single markup element
     * for this component should override this method and include calls to
     * to <code>writeAttribute()</code> and <code>writeURIAttribute</code>
     * on the specified <code>ResponseWriter</code>.</p>
     *
     * <p>The default implementation does nothing.</p>
     *
     * @param context <code>FacesContext</code> for the current request
     * @param component <code>EditableValueHolder</code> component whose
     *  submitted value is to be stored
     * @param writer <code>ResponseWriter</code> to which the element
     *  start should be rendered
     *
     * @exception IOException if an input/output error occurs
     */
    protected void renderAttributes(FacesContext context, UIComponent component,
                                    ResponseWriter writer) throws IOException {

    }


    /**
     * <p>Render the element end for the generated markup related to this
     * component.  Simple renderers that create a single markup element
     * for this component should override this method and include a call
     * to <code>endElement()</code> on the specified
     * <code>ResponseWriter</code>.</p>
     *

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
综合亚洲深深色噜噜狠狠网站| 色一情一伦一子一伦一区| 国产黄色精品视频| av不卡在线播放| 欧美高清www午色夜在线视频| 久久综合99re88久久爱| ...xxx性欧美| 男男视频亚洲欧美| 99麻豆久久久国产精品免费优播| 欧美丰满高潮xxxx喷水动漫| 亚洲国产高清aⅴ视频| 偷窥国产亚洲免费视频| 国产福利电影一区二区三区| 在线观看一区二区精品视频| 精品粉嫩超白一线天av| 一区二区三区视频在线看| 国产乱一区二区| 欧美日韩亚洲丝袜制服| 欧美国产日韩a欧美在线观看| 亚洲高清视频在线| 国产精品夜夜爽| 精品视频在线看| 久久精品夜色噜噜亚洲aⅴ| 亚洲小说欧美激情另类| 成人午夜av电影| 欧美一级午夜免费电影| 一区二区三区在线观看视频 | 色欧美片视频在线观看在线视频| 日韩欧美在线1卡| 亚洲综合色丁香婷婷六月图片| 狠狠色丁香久久婷婷综| 欧美自拍偷拍午夜视频| 中文字幕一区二区三区色视频 | 日韩欧美成人激情| 亚洲一级不卡视频| av影院午夜一区| 久久久三级国产网站| 五月婷婷欧美视频| 日本久久电影网| 国产精品久久久久久久第一福利| 久久99国产精品麻豆| 在线电影欧美成精品| 亚洲精品自拍动漫在线| 丁香天五香天堂综合| 精品美女在线观看| 蜜臀av性久久久久蜜臀aⅴ流畅 | 亚洲一区在线观看免费观看电影高清 | 成人精品国产免费网站| 精品久久一区二区三区| 秋霞成人午夜伦在线观看| 欧美亚洲综合另类| 一区二区三区在线视频免费| 99国产精品久久久| 国产精品网曝门| 国产99精品国产| 久久久久久久av麻豆果冻| 久久99精品久久久久久久久久久久| 欧美高清视频www夜色资源网| 一级日本不卡的影视| 91在线国内视频| 最新日韩av在线| 国产大片一区二区| 久久久久久久久久久久久久久99| 久久97超碰国产精品超碰| 欧美一区二区精品在线| 日韩av高清在线观看| 69堂亚洲精品首页| 免费观看在线综合色| 欧美精品日韩一本| 日韩av网站免费在线| 欧美一区二区成人6969| 免费成人在线影院| 欧美精品一区二区在线播放| 国产精品一区专区| 国产欧美日韩综合精品一区二区| 成人精品视频一区二区三区尤物| 国产精品少妇自拍| 91欧美激情一区二区三区成人| 亚洲乱码日产精品bd| 欧美亚洲国产一区二区三区va| 亚洲综合久久久| 欧美疯狂做受xxxx富婆| 奇米影视在线99精品| 久久综合九色综合97_久久久| 国产精品 欧美精品| 国产精品乱人伦| 91成人免费网站| 午夜电影一区二区| 2020国产精品| av在线播放成人| 午夜亚洲国产au精品一区二区| 911精品产国品一二三产区| 狠狠色2019综合网| 国产精品美女久久久久av爽李琼| 91福利视频在线| 日韩影院在线观看| 久久综合成人精品亚洲另类欧美| 成人午夜视频免费看| 一区二区日韩电影| 日韩欧美二区三区| 不卡在线观看av| 亚洲午夜久久久久久久久电影院 | 九色综合狠狠综合久久| 中文字幕电影一区| 欧美日韩中文字幕精品| 紧缚奴在线一区二区三区| 国产精品美女一区二区在线观看| 欧美午夜免费电影| 国精品**一区二区三区在线蜜桃| 中文字幕制服丝袜一区二区三区 | 日本欧洲一区二区| 国产亚洲成年网址在线观看| 色呦呦国产精品| 美女免费视频一区| 亚洲视频免费看| 欧美一区日韩一区| 99久久99久久免费精品蜜臀| 日韩在线a电影| 国产精品福利电影一区二区三区四区 | 久久久www免费人成精品| 日本韩国欧美在线| 精品亚洲成a人在线观看| 亚洲男人都懂的| 337p粉嫩大胆噜噜噜噜噜91av | 亚洲一区国产视频| 久久久久久久久99精品| 欧美少妇xxx| 成人国产电影网| 久久精品国产**网站演员| 亚洲日本va在线观看| 亚洲精品在线观看网站| 欧美中文字幕亚洲一区二区va在线| 精东粉嫩av免费一区二区三区| 亚洲综合小说图片| 中文字幕免费不卡在线| 日韩精品中文字幕一区| 欧洲生活片亚洲生活在线观看| 国产精品亚洲一区二区三区在线| 婷婷一区二区三区| 中文字幕日韩一区| 久久一区二区三区国产精品| 欧美色综合天天久久综合精品| 国产成人av影院| 日本视频中文字幕一区二区三区| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 日韩欧美一区二区在线视频| 欧美偷拍一区二区| 99国产精品久久久久| 国产成人亚洲精品青草天美| 日本中文在线一区| 亚洲午夜免费电影| 亚洲欧美激情小说另类| 国产精品久久影院| 国产视频一区二区在线观看| 日韩一区二区三区高清免费看看 | 日韩精品成人一区二区在线| 亚洲男人的天堂在线aⅴ视频| 欧美激情在线观看视频免费| 久久一区二区三区四区| 日韩欧美国产一区在线观看| 91精品国产综合久久精品app| 欧美日韩一区在线观看| 91久久一区二区| 色综合久久天天| 99re热这里只有精品视频| 国产成人鲁色资源国产91色综 | 中文字幕av在线一区二区三区| 精品福利一区二区三区免费视频| 欧美顶级少妇做爰| 在线播放/欧美激情| 欧美群妇大交群的观看方式| 欧美三级一区二区| 欧美三级中文字幕在线观看| 在线观看网站黄不卡| 日本电影欧美片| 欧洲亚洲国产日韩| 欧美性xxxxxx少妇| 欧美色网站导航| 欧美日韩性生活| 欧美精品v日韩精品v韩国精品v| 欧美日本韩国一区| 91麻豆精品国产91久久久久久久久| 欧美精三区欧美精三区| 欧美精品久久天天躁| 91精品国产综合久久小美女| 欧美一区二区三区男人的天堂| 日韩一区二区三区观看| 精品久久99ma| 久久久久国产精品厨房| 国产精品视频你懂的| 国产精品久久久久四虎| 亚洲精品高清在线观看| 一区二区三区在线视频播放| 同产精品九九九| 久草在线在线精品观看| 国产成人在线视频网站| 91在线小视频| 欧美色精品在线视频| 91精品在线观看入口| 久久久一区二区三区捆绑**|