@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; }
/** * 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); }
@Before public void setUp() { writer = new StringWriter(); formTag = new FormTag(); tagWriter = new TagWriter(writer); inputTag = new Html5InputTag() { @Override protected TagWriter createTagWriter() { return tagWriter; } }; inputTag.setParent(formTag); pageContext = createAndPopulatePageContext(null); inputTag.setPageContext(pageContext); }
/** * 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(); }
@Override public void writeCustomTagAttributes(TagWriter tagWriter) throws JspException { String linkAddress = href; if(keepQueryString){ String qs = WebHolder.getSpringContextHolderRequest().get().getQueryString(); if(StringUtils.isBlank(qs)){ writeHref(tagWriter, linkAddress); return ; } linkAddress += linkAddress.contains("?")?"&":"?"; linkAddress += qs; } writeHref(tagWriter, linkAddress); }
@Override protected int writeTagContent(TagWriter tagWriter) throws JspException { PropertyDescriptor propertyDescriptor = getPropertyDescriptor(); if ((propertyDescriptor != null) && !propertyDescriptor.getConstraintDescriptors().isEmpty()) { annotations = constrainteByAnnotationType(propertyDescriptor); } valueType = getBindStatus().getValueType(); return super.writeTagContent(tagWriter); }
@Override protected void writeValue(TagWriter tagWriter) throws JspException { super.writeValue(tagWriter); if (annotations != null) { writeHtml5Attributes(tagWriter); } }
protected void writeMaxLengthAttribute(TagWriter tagWriter) throws JspException { if (annotations.containsKey(Size.class)) { Size size = getAnnotation(Size.class); if ((size.max() != Integer.MAX_VALUE) && StringUtils.isEmpty(getMaxlength())) { writeOptionalAttribute(tagWriter, MAXLENGTH_ATTRIBUTE, String.valueOf(size.max())); } } }
/** * SPR-4022 */ @SuppressWarnings("serial") @Test public void nestingInFormTag() throws JspException { PageContext pc = createPageContext(); TestBean tb = new TestBean(); DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); ServletRequestDataBinder binder = new ServletRequestDataBinder(tb, "tb"); CustomDateEditor l = new CustomDateEditor(df, true); binder.registerCustomEditor(Date.class, l); pc.getRequest().setAttribute(BindingResult.MODEL_KEY_PREFIX + "tb", binder.getBindingResult()); FormTag formTag = new FormTag() { @Override protected TagWriter createTagWriter() { return new TagWriter(new StringWriter()); } }; String action = "/form.html"; String commandName = "tb"; String name = "formName"; String enctype = "my/enctype"; String method = "POST"; String onsubmit = "onsubmit"; String onreset = "onreset"; String cssClass = "myClass"; String cssStyle = "myStyle"; String acceptCharset = "iso-8859-1"; formTag.setName(name); formTag.setCssClass(cssClass); formTag.setCssStyle(cssStyle); formTag.setAction(action); formTag.setCommandName(commandName); formTag.setEnctype(enctype); formTag.setMethod(method); formTag.setOnsubmit(onsubmit); formTag.setOnreset(onreset); formTag.setAcceptCharset(acceptCharset); formTag.setPageContext(pc); formTag.doStartTag(); BindTag bindTag1 = new BindTag(); bindTag1.setPageContext(pc); bindTag1.setPath("date"); bindTag1.doStartTag(); bindTag1.doEndTag(); BindTag bindTag2 = new BindTag(); bindTag2.setPageContext(pc); bindTag2.setPath("tb.date"); bindTag2.doStartTag(); bindTag2.doEndTag(); BindTag bindTag3 = new BindTag(); bindTag3.setPageContext(pc); bindTag3.setPath("tb"); bindTag3.doStartTag(); bindTag3.doEndTag(); formTag.doEndTag(); }
protected TagWriter createTagWriter(){ return new TagWriter(pageContext); }
protected void writeCustomTagAttributes(TagWriter tagWriter) throws JspException{ }
private void writeHref(TagWriter tagWriter, String linkAddress) throws JspException{ if(encodeUrl){ linkAddress = URLEncoder.SAFE_PARAMS_ENCODER.encode(linkAddress); } tagWriter.writeAttribute("href", linkAddress); }
/** * SPR-4022 */ @SuppressWarnings("serial") public void testNestingInFormTag() throws JspException { PageContext pc = createPageContext(); TestBean tb = new TestBean(); DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); ServletRequestDataBinder binder = new ServletRequestDataBinder(tb, "tb"); CustomDateEditor l = new CustomDateEditor(df, true); binder.registerCustomEditor(Date.class, l); pc.getRequest().setAttribute(BindingResult.MODEL_KEY_PREFIX + "tb", binder.getBindingResult()); FormTag formTag = new FormTag() { @Override protected TagWriter createTagWriter() { return new TagWriter(new StringWriter()); } }; String action = "/form.html"; String commandName = "tb"; String name = "formName"; String enctype = "my/enctype"; String method = "POST"; String onsubmit = "onsubmit"; String onreset = "onreset"; String cssClass = "myClass"; String cssStyle = "myStyle"; String acceptCharset = "iso-8859-1"; formTag.setName(name); formTag.setCssClass(cssClass); formTag.setCssStyle(cssStyle); formTag.setAction(action); formTag.setCommandName(commandName); formTag.setEnctype(enctype); formTag.setMethod(method); formTag.setOnsubmit(onsubmit); formTag.setOnreset(onreset); formTag.setAcceptCharset(acceptCharset); formTag.setPageContext(pc); formTag.doStartTag(); BindTag bindTag1 = new BindTag(); bindTag1.setPageContext(pc); bindTag1.setPath("date"); bindTag1.doStartTag(); bindTag1.doEndTag(); BindTag bindTag2 = new BindTag(); bindTag2.setPageContext(pc); bindTag2.setPath("tb.date"); bindTag2.doStartTag(); bindTag2.doEndTag(); BindTag bindTag3 = new BindTag(); bindTag3.setPageContext(pc); bindTag3.setPath("tb"); bindTag3.doStartTag(); bindTag3.doEndTag(); formTag.doEndTag(); }
/** * {@inheritDoc} */ @Override protected int writeTagContent(TagWriter tagWriter) throws JspException { return EVAL_BODY_INCLUDE; }
protected void writeHtml5Attributes(TagWriter tagWriter) throws JspException { writeMaxLengthAttribute(tagWriter); writeRequiredAttribute(tagWriter); writeMaxAttribute(tagWriter); writeMinAttribute(tagWriter); }
protected void writeRequiredAttribute(TagWriter tagWriter) throws JspException { if (annotations.containsKey(NotEmpty.class) || annotations.containsKey(NotNull.class)) { writeOptionalAttribute(tagWriter, "required", "required"); } }
protected void writeMaxAttribute(TagWriter tagWriter) throws JspException { if (annotations.containsKey(Max.class)) { Max max = getAnnotation(Max.class); writeOptionalAttribute(tagWriter, MAX_ATTRIBUTE, String.valueOf(max.value())); } }
protected void writeMinAttribute(TagWriter tagWriter) throws JspException { if (annotations.containsKey(Min.class)) { Min min = getAnnotation(Min.class); writeOptionalAttribute(tagWriter, MIN_ATTRIBUTE, String.valueOf(min.value())); } }