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

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

?? abstractdataboundformelementtag.java

?? spring framework 2.5.4源代碼
?? JAVA
字號:
/*
 * Copyright 2002-2008 the original author or authors.
 *
 * 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.springframework.web.servlet.tags.form;

import java.beans.PropertyEditor;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.PageContext;

import org.springframework.beans.PropertyAccessor;
import org.springframework.core.Conventions;
import org.springframework.util.StringUtils;
import org.springframework.web.servlet.support.BindStatus;
import org.springframework.web.servlet.tags.EditorAwareTag;
import org.springframework.web.servlet.tags.NestedPathTag;

/**
 * Base tag for all data-binding aware JSP form tags.
 *
 * <p>Provides the common {@link #setPath path} and {@link #setId id} properties.
 * Provides sub-classes with utility methods for accessing the {@link BindStatus}
 * of their bound value and also for {@link #writeOptionalAttribute interacting}
 * with the {@link TagWriter}.
 *
 * @author Rob Harrop
 * @author Juergen Hoeller
 * @since 2.0
 */
public abstract class AbstractDataBoundFormElementTag extends AbstractFormTag implements EditorAwareTag {

	/**
	 * Name of the exposed path variable within the scope of this tag: "nestedPath".
	 * Same value as {@link org.springframework.web.servlet.tags.NestedPathTag#NESTED_PATH_VARIABLE_NAME}.
	 */
	protected static final String NESTED_PATH_VARIABLE_NAME = NestedPathTag.NESTED_PATH_VARIABLE_NAME;

	/**
	 * The name of the {@link javax.servlet.jsp.PageContext} attribute under which the
	 * command object name is exposed.
	 * @deprecated as of Spring 2.5, in favor of {@link FormTag#MODEL_ATTRIBUTE_VARIABLE_NAME}
	 */
	public static final String COMMAND_NAME_VARIABLE_NAME =
			Conventions.getQualifiedAttributeName(AbstractFormTag.class, "commandName");


	/**
	 * The property path from the {@link FormTag#setModelAttribute form object}.
	 */
	private String path;

	/**
	 * The value of the '<code>id</code>' attribute.
	 */
	private String id;

	/**
	 * The {@link BindStatus} of this tag.
	 */
	private BindStatus bindStatus;


	/**
	 * Set the property path from the {@link FormTag#setModelAttribute form object}.
	 * May be a runtime expression.
	 */
	public void setPath(String path) {
		this.path = path;
	}

	/**
	 * Get the {@link #evaluate resolved} property path for the
	 * {@link FormTag#setModelAttribute form object}.
	 */
	protected final String getPath() throws JspException {
		String resolvedPath = (String) evaluate("path", this.path);
		return (resolvedPath != null ? resolvedPath : "");
	}

	/**
	 * Set the value of the '<code>id</code>' attribute.
	 * <p>May be a runtime expression; defaults to the value of {@link #getName()}.
	 * Note that the default value may not be valid for certain tags.
	 */
	public void setId(String id) {
		this.id = id;
	}

	/**
	 * Get the value of the '<code>id</code>' attribute.
	 */
	public String getId() {
		return this.id;
	}


	/**
	 * Writes the default set of attributes to the supplied {@link TagWriter}.
	 * Further abstract sub-classes should override this method to add in
	 * any additional default attributes but <strong>must</strong> remember
	 * to call the <code>super</code> method.
	 * <p>Concrete sub-classes should call this method when/if they want
	 * to render default attributes.
	 * @param tagWriter the {@link TagWriter} to which any attributes are to be written
	 */
	protected void writeDefaultAttributes(TagWriter tagWriter) throws JspException {
		writeOptionalAttribute(tagWriter, "id", resolveId());
		writeOptionalAttribute(tagWriter, "name", getName());
	}

	/**
	 * Determine the '<code>id</code>' attribute value for this tag,
	 * autogenerating one if none specified.
	 * @see #getId()
	 * @see #autogenerateId()
	 */
	protected String resolveId() throws JspException {
		Object id = evaluate("id", getId());
		if (id != null) {
			String idString = id.toString();
			return (StringUtils.hasText(idString) ? idString : null);
		}
		return autogenerateId();
	}

	/**
	 * Autogenerate the '<code>id</code>' attribute value for this tag.
	 * <p>The default implementation simply delegates to {@link #getName()},
	 * deleting invalid characters (such as "[" or "]").
	 */
	protected String autogenerateId() throws JspException {
		return StringUtils.deleteAny(getName(), "[]");
	}

	/**
	 * Get the value for the HTML '<code>name</code>' attribute.
	 * <p>The default implementation simply delegates to
	 * {@link #getPropertyPath()} to use the property path as the name.
	 * For the most part this is desirable as it links with the server-side
	 * expectation for databinding. However, some subclasses may wish to change
	 * the value of the '<code>name</code>' attribute without changing the bind path.
	 * @return the value for the HTML '<code>name</code>' attribute
	 */
	protected String getName() throws JspException {
		return getPropertyPath();
	}

	/**
	 * Get the {@link BindStatus} for this tag.
	 */
	protected BindStatus getBindStatus() throws JspException {
		if (this.bindStatus == null) {
			// HTML escaping in tags is performed by the ValueFormatter class.
			String nestedPath = getNestedPath();
			String pathToUse = (nestedPath != null ? nestedPath + getPath() : getPath());
			if (pathToUse.endsWith(PropertyAccessor.NESTED_PROPERTY_SEPARATOR)) {
				pathToUse = pathToUse.substring(0, pathToUse.length() - 1);
			}
			this.bindStatus = new BindStatus(getRequestContext(), pathToUse, false);
		}
		return this.bindStatus;
	}

	/**
	 * Get the value of the nested path that may have been exposed by the
	 * {@link NestedPathTag}.
	 */
	protected String getNestedPath() {
		return (String) this.pageContext.getAttribute(NESTED_PATH_VARIABLE_NAME, PageContext.REQUEST_SCOPE);
	}

	/**
	 * Build the property path for this tag, including the nested path
	 * but <i>not</i> prefixed with the name of the form attribute.
	 * @see #getNestedPath()
	 * @see #getPath()
	 */
	protected String getPropertyPath() throws JspException {
		String expression = getBindStatus().getExpression();
		return (expression != null ? expression : "");
	}

	/**
	 * Get the bound value.
	 * @see #getBindStatus()
	 */
	protected final Object getBoundValue() throws JspException {
		return getBindStatus().getValue();
	}

	/**
	 * Get the {@link PropertyEditor}, if any, in use for value bound to this tag.
	 */
	protected PropertyEditor getPropertyEditor() throws JspException {
		return getBindStatus().getEditor();
	}

	/**
	 * Exposes the {@link PropertyEditor} for {@link EditorAwareTag}.
	 * <p>Use {@link #getPropertyEditor()} for internal rendering purposes.
	 */
	public final PropertyEditor getEditor() throws JspException {
		return getPropertyEditor();
	}

	/**
	 * Disposes of the {@link BindStatus} instance.
	 */
	public void doFinally() {
		super.doFinally();
		this.bindStatus = null;
	}

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一级片免费看| 日韩亚洲欧美成人一区| 精品奇米国产一区二区三区| 一区二区三区在线影院| 成人福利视频在线| 久久久久九九视频| 麻豆成人综合网| 欧美一区二区黄色| 偷拍一区二区三区| 欧美美女网站色| 亚洲va中文字幕| 欧美综合在线视频| 欧美激情一区不卡| 九九在线精品视频| 欧美第一区第二区| 成人免费观看视频| 亚洲理论在线观看| 日韩一区二区在线观看| 国产一区二区三区美女| 亚洲精品综合在线| 日韩一级片网站| 粉嫩一区二区三区在线看| 亚洲视频图片小说| 日韩区在线观看| 成人av影院在线| 极品少妇一区二区| 亚洲国产成人精品视频| 国产精品素人一区二区| 欧美精品一二三四| 97精品久久久久中文字幕| 青青草97国产精品免费观看| 久久精品男人的天堂| 欧美日韩国产免费一区二区| 国产精品一区一区三区| 日本成人在线不卡视频| 亚洲女同ⅹxx女同tv| 欧美tickling网站挠脚心| 成人综合在线网站| 日本欧美加勒比视频| 亚洲精品福利视频网站| 国产欧美日韩视频在线观看| 欧美人成免费网站| 在线观看国产一区二区| 波多野结衣中文一区| 国产伦精品一区二区三区免费迷| 青青草精品视频| 日本v片在线高清不卡在线观看| 亚洲精品成人少妇| 亚洲天堂网中文字| 亚洲精品国产a| 亚洲综合丁香婷婷六月香| 成人欧美一区二区三区1314| 国产精品欧美精品| 国产欧美日韩另类视频免费观看| 久久综合久色欧美综合狠狠| 欧美日韩欧美一区二区| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 久久亚区不卡日本| 日本一区二区成人| 中文字幕av在线一区二区三区| 久久天天做天天爱综合色| www亚洲一区| 中文一区在线播放| 一区二区三区四区亚洲| 日日夜夜精品视频天天综合网| 五月婷婷另类国产| 狠狠狠色丁香婷婷综合激情| 国产精品一区二区x88av| 91丝袜高跟美女视频| 欧美男生操女生| 国产欧美一区二区精品婷婷| 亚洲婷婷综合久久一本伊一区| 五月开心婷婷久久| 成人久久久精品乱码一区二区三区| 色综合久久久久综合99| 日韩视频在线你懂得| 亚洲欧洲99久久| 精品一区二区三区影院在线午夜| 色综合中文字幕国产 | 99国产精品国产精品毛片| 日本大香伊一区二区三区| 日韩一级高清毛片| 亚洲黄色尤物视频| 岛国精品在线播放| 日韩一区二区三区在线| 一区二区三区色| 粉嫩一区二区三区在线看| 久久综合色播五月| 免费高清在线一区| 91麻豆精品国产91久久久使用方法| 国产精品私房写真福利视频| 精品一区二区三区在线视频| 51精品秘密在线观看| 亚洲午夜精品网| 欧美亚洲国产一卡| 亚洲欧美另类图片小说| a4yy欧美一区二区三区| 日本一区二区三区dvd视频在线| 三级欧美在线一区| 成人深夜在线观看| 亚洲国产高清在线观看视频| 欧美亚洲丝袜传媒另类| 国产精品无码永久免费888| 亚洲.国产.中文慕字在线| 成人深夜福利app| 日韩欧美精品在线视频| 久久色.com| 亚洲成年人影院| 欧美日韩成人激情| 制服丝袜中文字幕一区| 91理论电影在线观看| 色综合中文综合网| 日韩精品一区二区三区在线播放 | 亚洲欧洲制服丝袜| 一级做a爱片久久| 国产一区二区三区在线观看免费| 国产91丝袜在线播放| 精品一区二区在线看| 精品对白一区国产伦| 日本亚洲欧美天堂免费| 精品国产伦一区二区三区观看方式 | 在线区一区二视频| 午夜婷婷国产麻豆精品| 91精品国产福利在线观看| 国产一本一道久久香蕉| 亚洲欧洲美洲综合色网| 51精品久久久久久久蜜臀| 国产精品亚洲人在线观看| 亚洲一级二级在线| 国产精品国产三级国产普通话99 | 欧美日韩情趣电影| 国产乱码字幕精品高清av| 亚洲激情一二三区| 久久久久国产精品麻豆| 欧美日韩国产综合一区二区三区| 日韩中文字幕麻豆| 中文字幕亚洲不卡| 亚洲欧洲一区二区在线播放| 国产精品久久久久国产精品日日| 国产精品女人毛片| 伊人婷婷欧美激情| 日韩成人dvd| 成人激情文学综合网| 国产999精品久久久久久| 91福利国产精品| 成人av动漫网站| 91网上在线视频| 日本韩国视频一区二区| av在线免费不卡| 97se亚洲国产综合自在线不卡| 国产成人免费在线视频| 国产成人精品1024| 国产91丝袜在线观看| 成人一区二区在线观看| 色综合中文字幕国产 | 亚洲电影第三页| 亚洲v精品v日韩v欧美v专区| 中文字幕av在线一区二区三区| 国产精品欧美一级免费| **性色生活片久久毛片| 亚洲影视资源网| 国产在线精品不卡| 99天天综合性| 日韩一区二区三区四区 | 欧美一区二区视频网站| 欧美成人精品1314www| 中文字幕不卡三区| 亚洲一区二区在线免费观看视频| 午夜一区二区三区视频| 精品夜夜嗨av一区二区三区| 成人综合在线观看| 欧美日韩国产首页| 欧美激情一二三区| 午夜欧美视频在线观看| 国产成人自拍网| 欧美一区午夜精品| 自拍偷拍欧美激情| 久久国产日韩欧美精品| 91麻豆免费看| 欧美激情一区二区| 蜜桃av噜噜一区| 91小视频免费观看| 久久久蜜桃精品| 日韩av中文字幕一区二区| va亚洲va日韩不卡在线观看| 欧美日韩视频专区在线播放| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 成人18视频日本| 欧美精品一区二区在线观看| 亚洲bt欧美bt精品777| 波多野结衣中文字幕一区| 久久久久国产精品人| 久久精品国产色蜜蜜麻豆| 欧美理论电影在线| 亚洲大片一区二区三区| 日本高清不卡视频| 亚洲午夜精品网| 91麻豆精品国产91久久久久| 亚洲成人第一页| 精品福利av导航|