提交 4d897e7a 编写于 作者: J Juergen Hoeller

lenient evaluation of boolean 'true' attribute expressions in JSP form tag library (SPR-6790)

上级 41ecbc68
/* /*
* Copyright 2002-2007 the original author or authors. * Copyright 2002-2010 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
...@@ -17,7 +17,6 @@ ...@@ -17,7 +17,6 @@
package org.springframework.web.servlet.tags.form; package org.springframework.web.servlet.tags.form;
import java.beans.PropertyEditor; import java.beans.PropertyEditor;
import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspException;
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
...@@ -55,6 +54,18 @@ public abstract class AbstractFormTag extends HtmlEscapingAwareTag { ...@@ -55,6 +54,18 @@ public abstract class AbstractFormTag extends HtmlEscapingAwareTag {
} }
} }
/**
* Evaluate the supplied value for the supplied attribute name. If the supplied value
* is <code>null</code> then <code>false</code> is returned, otherwise evaluation is
* handled using {@link ExpressionEvaluationUtils#evaluate(String, String, javax.servlet.jsp.PageContext)},
* with subsequent matching against <code>Boolean.TRUE</code> and <code>Boolean.valueOf</code>.
*/
protected boolean evaluateBoolean(String attributeName, String value) throws JspException {
Object evaluated = ExpressionEvaluationUtils.evaluate(attributeName, value, this.pageContext);
return (Boolean.TRUE.equals(evaluated) ||
(evaluated instanceof String && Boolean.valueOf((String) evaluated)));
}
/** /**
* Optionally writes the supplied value under the supplied attribute name into the supplied * Optionally writes the supplied value under the supplied attribute name into the supplied
* {@link TagWriter}. In this case, the supplied value is {@link #evaluate evaluated} first * {@link TagWriter}. In this case, the supplied value is {@link #evaluate evaluated} first
......
/* /*
* Copyright 2002-2007 the original author or authors. * Copyright 2002-2010 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
...@@ -192,7 +192,7 @@ public abstract class AbstractHtmlInputElementTag extends AbstractHtmlElementTag ...@@ -192,7 +192,7 @@ public abstract class AbstractHtmlInputElementTag extends AbstractHtmlElementTag
* Is the current HTML tag disabled? * Is the current HTML tag disabled?
*/ */
protected boolean isDisabled() throws JspException { protected boolean isDisabled() throws JspException {
return "true".equals(evaluate(DISABLED_ATTRIBUTE, getDisabled())); return evaluateBoolean(DISABLED_ATTRIBUTE, getDisabled());
} }
/** /**
...@@ -202,7 +202,7 @@ public abstract class AbstractHtmlInputElementTag extends AbstractHtmlElementTag ...@@ -202,7 +202,7 @@ public abstract class AbstractHtmlInputElementTag extends AbstractHtmlElementTag
* not affected by them since their values don't change (only their status does.) * not affected by them since their values don't change (only their status does.)
*/ */
protected boolean isReadonly() throws JspException { protected boolean isReadonly() throws JspException {
return "true".equals(evaluate(READONLY_ATTRIBUTE, getReadonly())); return evaluateBoolean(READONLY_ATTRIBUTE, getReadonly());
} }
} }
/* /*
* Copyright 2002-2008 the original author or authors. * Copyright 2002-2010 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
...@@ -126,8 +126,8 @@ public class OptionTag extends AbstractHtmlElementBodyTag implements BodyTag { ...@@ -126,8 +126,8 @@ public class OptionTag extends AbstractHtmlElementBodyTag implements BodyTag {
* Is the current HTML tag disabled? * Is the current HTML tag disabled?
* @return <code>true</code> if this tag is disabled * @return <code>true</code> if this tag is disabled
*/ */
protected boolean isDisabled() { protected boolean isDisabled() throws JspException {
return "true".equals(getDisabled()); return evaluateBoolean(DISABLED_ATTRIBUTE, getDisabled());
} }
/** /**
......
/* /*
* Copyright 2002-2008 the original author or authors. * Copyright 2002-2010 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
...@@ -19,7 +19,6 @@ package org.springframework.web.servlet.tags.form; ...@@ -19,7 +19,6 @@ package org.springframework.web.servlet.tags.form;
import java.util.Collection; import java.util.Collection;
import java.util.Iterator; import java.util.Iterator;
import java.util.Map; import java.util.Map;
import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspException;
import org.springframework.beans.BeanWrapper; import org.springframework.beans.BeanWrapper;
...@@ -258,7 +257,7 @@ class OptionWriter { ...@@ -258,7 +257,7 @@ class OptionWriter {
/** /**
* Determine whether the option fields should be disabled. * Determine whether the option fields should be disabled.
*/ */
protected boolean isOptionDisabled() { protected boolean isOptionDisabled() throws JspException {
return false; return false;
} }
......
...@@ -138,8 +138,8 @@ public class OptionsTag extends AbstractHtmlElementTag { ...@@ -138,8 +138,8 @@ public class OptionsTag extends AbstractHtmlElementTag {
* Is the current HTML tag disabled? * Is the current HTML tag disabled?
* @return <code>true</code> if this tag is disabled * @return <code>true</code> if this tag is disabled
*/ */
protected boolean isDisabled() { protected boolean isDisabled() throws JspException {
return "true".equals(getDisabled()); return evaluateBoolean("disabled", getDisabled());
} }
...@@ -149,7 +149,7 @@ public class OptionsTag extends AbstractHtmlElementTag { ...@@ -149,7 +149,7 @@ public class OptionsTag extends AbstractHtmlElementTag {
Object items = getItems(); Object items = getItems();
Object itemsObject = null; Object itemsObject = null;
if (items != null) { if (items != null) {
itemsObject = (items instanceof String ? evaluate("items", (String) items) : items); itemsObject = (items instanceof String ? evaluate("items", items) : items);
} else { } else {
Class<?> selectTagBoundType = ((SelectTag) findAncestorWithClass(this, SelectTag.class)) Class<?> selectTagBoundType = ((SelectTag) findAncestorWithClass(this, SelectTag.class))
.getBindStatus().getValueType(); .getBindStatus().getValueType();
...@@ -204,7 +204,7 @@ public class OptionsTag extends AbstractHtmlElementTag { ...@@ -204,7 +204,7 @@ public class OptionsTag extends AbstractHtmlElementTag {
} }
@Override @Override
protected boolean isOptionDisabled() { protected boolean isOptionDisabled() throws JspException {
return isDisabled(); return isDisabled();
} }
......
/* /*
* Copyright 2002-2008 the original author or authors. * Copyright 2002-2010 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
...@@ -18,7 +18,6 @@ package org.springframework.web.servlet.tags.form; ...@@ -18,7 +18,6 @@ package org.springframework.web.servlet.tags.form;
import java.util.Collection; import java.util.Collection;
import java.util.Map; import java.util.Map;
import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspException;
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
...@@ -247,12 +246,11 @@ public class SelectTag extends AbstractHtmlInputElementTag { ...@@ -247,12 +246,11 @@ public class SelectTag extends AbstractHtmlInputElementTag {
private boolean isMultiple() throws JspException { private boolean isMultiple() throws JspException {
Object multiple = getMultiple(); Object multiple = getMultiple();
if (Boolean.TRUE.equals(multiple) || "true".equals(multiple) || "multiple".equals(multiple)) { if (Boolean.TRUE.equals(multiple) || "multiple".equals(multiple)) {
return true; return true;
} }
else if (this.multiple instanceof String) { else if (this.multiple instanceof String) {
Object evaluatedValue = evaluate("multiple", multiple); return evaluateBoolean("multiple", (String) multiple);
return Boolean.TRUE.equals(evaluatedValue);
} }
return forceMultiple(); return forceMultiple();
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册