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

本文转自: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
@Override
protected 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
@Override
protected 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

目前只用到这几个,如果有别的需求,可以到原地址去看看。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值