SpringMVC自定义控件:TagWriter使用范例

来源:互联网 发布:win10输入法云计算 编辑:程序博客网 时间:2024/05/20 07:50

本文转自:http://www.programcreek.com/java-api-examples/index.php?api=org.springframework.web.servlet.tags.form.TagWriter

TagWriter使用范例

例1

/******************************************************************************* * Copyright (c) 2005, 2014 springside.github.io  *  * Licensed under the Apache License, Version 2.0 (the "License");  *******************************************************************************/package org.springside.modules.web.taglib; import java.util.Collection; import java.util.Iterator; import java.util.Map; import javax.servlet.jsp.JspException; import org.springframework.beans.BeanWrapper; import org.springframework.beans.PropertyAccessorFactory; import org.springframework.util.ObjectUtils; import org.springframework.web.servlet.tags.form.AbstractMultiCheckedElementTag; import org.springframework.web.servlet.tags.form.TagWriter; /** * 重载实现Twitter Bootstrap的格式.  *   * @author calvin  */ public abstract class BSAbstractMultiCheckedElementTag extends AbstractMultiCheckedElementTag {  private String labelCssClass;  public void setLabelCssClass(String labelCssClass) {   this.labelCssClass = labelCssClass;  }  /**  * Copy & Paste, 无修正.   */  @Override  protected int writeTagContent(TagWriter tagWriter) throws JspException {   Object items = getItems();   Object itemsObject = (items instanceof String ? evaluate("items", items) : items);   String itemValue = getItemValue();   String itemLabel = getItemLabel();   String valueProperty = (itemValue != null ? ObjectUtils.getDisplayString(evaluate("itemValue", itemValue))     : null);   String labelProperty = (itemLabel != null ? ObjectUtils.getDisplayString(evaluate("itemLabel", itemLabel))     : null);   Class<?> boundType = getBindStatus().getValueType();   if ((itemsObject == null) && (boundType != null) && boundType.isEnum()) {    itemsObject = boundType.getEnumConstants();   }   if (itemsObject == null) {    throw new IllegalArgumentException(      "Attribute 'items' is required and must be a Collection, an Array or a Map");   }   if (itemsObject.getClass().isArray()) {    Object[] itemsArray = (Object[]) itemsObject;    for (int i = 0; i < itemsArray.length; i++) {     Object item = itemsArray[i];     writeObjectEntry(tagWriter, valueProperty, labelProperty, item, i);    }   } else if (itemsObject instanceof Collection) {    final Collection optionCollection = (Collection) itemsObject;    int itemIndex = 0;    for (Iterator it = optionCollection.iterator(); it.hasNext(); itemIndex++) {     Object item = it.next();     writeObjectEntry(tagWriter, valueProperty, labelProperty, item, itemIndex);    }   } else if (itemsObject instanceof Map) {    final Map optionMap = (Map) itemsObject;    int itemIndex = 0;    for (Iterator it = optionMap.entrySet().iterator(); it.hasNext(); itemIndex++) {     Map.Entry entry = (Map.Entry) it.next();     writeMapEntry(tagWriter, valueProperty, labelProperty, entry, itemIndex);    }   } else {    throw new IllegalArgumentException("Attribute 'items' must be an array, a Collection or a Map");   }   return SKIP_BODY;  }  /**  * Copy & Paste, 无修正.   */  private void writeObjectEntry(TagWriter tagWriter, String valueProperty, String labelProperty, Object item,    int itemIndex) throws JspException {   BeanWrapper wrapper = PropertyAccessorFactory.forBeanPropertyAccess(item);   Object renderValue;   if (valueProperty != null) {    renderValue = wrapper.getPropertyValue(valueProperty);   } else if (item instanceof Enum) {    renderValue = ((Enum<?>) item).name();   } else {    renderValue = item;   }   Object renderLabel = (labelProperty != null ? wrapper.getPropertyValue(labelProperty) : item);   writeElementTag(tagWriter, item, renderValue, renderLabel, itemIndex);  }  /**  * Copy & Paste, 无修正.   */  private void writeMapEntry(TagWriter tagWriter, String valueProperty, String labelProperty, Map.Entry entry,    int itemIndex) throws JspException {   Object mapKey = entry.getKey();   Object mapValue = entry.getValue();   BeanWrapper mapKeyWrapper = PropertyAccessorFactory.forBeanPropertyAccess(mapKey);   BeanWrapper mapValueWrapper = PropertyAccessorFactory.forBeanPropertyAccess(mapValue);   Object renderValue = (valueProperty != null ? mapKeyWrapper.getPropertyValue(valueProperty) : mapKey.toString());   Object renderLabel = (labelProperty != null ? mapValueWrapper.getPropertyValue(labelProperty) : mapValue     .toString());   writeElementTag(tagWriter, mapKey, renderValue, renderLabel, itemIndex);  }  /**  * 重载方法,调整元素的输出顺序。   */  private void writeElementTag(TagWriter tagWriter, Object item, Object value, Object label, int itemIndex)    throws JspException {   String id = resolveId();   String resolvedLabelClass = getInputType();   if (labelCssClass != null) {    resolvedLabelClass += " " + labelCssClass;   }   tagWriter.startTag("label");   tagWriter.writeAttribute("for", id);   tagWriter.writeAttribute("class", resolvedLabelClass);   if (itemIndex > 0) {    Object resolvedDelimiter = evaluate("delimiter", getDelimiter());    if (resolvedDelimiter != null) {     tagWriter.appendValue(resolvedDelimiter.toString());    }   }   tagWriter.startTag("input");   writeOptionalAttribute(tagWriter, "id", id);   writeOptionalAttribute(tagWriter, "name", getName());   writeOptionalAttributes(tagWriter);   tagWriter.writeAttribute("type", getInputType());   renderFromValue(item, value, tagWriter);   tagWriter.endTag();   tagWriter.appendValue(convertToDisplayString(label));   tagWriter.endTag();  } }

Source View

例2

@Overrideprotected int writeTagContent(TagWriter tagWriter) throws JspException {    super.writeTagContent(tagWriter);    if (!isDisabled()) {        // Write out the 'field was present' marker.        tagWriter.startTag("input");        tagWriter.writeAttribute("type", "hidden");        String name = WebDataBinder.DEFAULT_FIELD_MARKER_PREFIX + getName();        tagWriter.writeAttribute("name", name);        tagWriter.writeAttribute("value", processFieldValue(name, "on", getInputType()));        tagWriter.endTag();    }    return SKIP_BODY;}

Source View

例3

@Overrideprotected void renderFromBodyContent(BodyContent bodyContent, TagWriter tagWriter) throws JspException {    tagWriter.startTag("div");    if(getBindStatus().getErrors().hasFieldErrors(getBindStatus().getExpression())) {        tagWriter.writeAttribute("class", getCssErrorClass());    } else {        tagWriter.writeAttribute("class", getCssClass());    }    tagWriter.appendValue(bodyContent.getString());    tagWriter.endTag();}

Source View

例4

private void writeArrow(        TagWriter tagWriter,        String imageFilename,        String cssClassName,        String alt,        String href) throws JspException {    tagWriter.startTag("li");    tagWriter.startTag("a");    tagWriter.writeAttribute("class", cssClassName);    tagWriter.writeAttribute("href",href);    tagWriter.writeAttribute("alt",alt);    tagWriter.startTag("img");    tagWriter.writeAttribute("src", "/img/" + imageFilename);    tagWriter.endTag(); // img    tagWriter.endTag(); // a    tagWriter.endTag(); // li}

Source View

目前只用到这几个,如果有别的需求,可以到原地址去看看。
原创粉丝点击