Author: pbenedict Date: Thu Jun 5 23:19:40 2008 New Revision: 663836 URL: http://svn.apache.org/viewvc?rev=663836&view=rev Log: STR-2913: Expose count of messages as page attribute
Modified: struts/struts1/trunk/taglib/src/main/java/org/apache/struts/taglib/html/MessagesTag.java struts/struts1/trunk/taglib/src/main/java/org/apache/struts/taglib/logic/MessagesPresentTag.java struts/struts1/trunk/taglib/src/main/resources/META-INF/tld/struts-html.tld struts/struts1/trunk/taglib/src/main/resources/META-INF/tld/struts-logic.tld Modified: struts/struts1/trunk/taglib/src/main/java/org/apache/struts/taglib/html/MessagesTag.java URL: http://svn.apache.org/viewvc/struts/struts1/trunk/taglib/src/main/java/org/apache/struts/taglib/html/MessagesTag.java?rev=663836&r1=663835&r2=663836&view=diff ============================================================================== --- struts/struts1/trunk/taglib/src/main/java/org/apache/struts/taglib/html/MessagesTag.java (original) +++ struts/struts1/trunk/taglib/src/main/java/org/apache/struts/taglib/html/MessagesTag.java Thu Jun 5 23:19:40 2008 @@ -102,6 +102,12 @@ * will be used to retrieve the messages from scope. */ protected String message = null; + + /** + * The name of the page-scoped attribute to be populated + * with the message count of the specifie dproperty. + */ + protected String count; /** * Filter the message replacement values for characters that are @@ -180,6 +186,14 @@ public void setFilterArgs(boolean filterArgs) { this.filterArgs = filterArgs; } + + public void setCount(String count) { + this.count = count; + } + + public String getCount() { + return count; + } /** * Construct an iterator for the specified collection, and begin looping @@ -210,9 +224,20 @@ } // Acquire the collection we are going to iterate over - this.iterator = - (property == null) ? messages.get() : messages.get(property); - + int size; + if (property == null) { + this.iterator = messages.get(); + size = messages.size(); + } else { + this.iterator = messages.get(property); + size = messages.size(property); + } + + // Expose the count when specified + if (count != null) { + pageContext.setAttribute(count, new Integer(size)); + } + // Store the first value and evaluate, or skip the body if none if (!this.iterator.hasNext()) { return SKIP_BODY; @@ -335,6 +360,10 @@ } } + if (count != null) { + pageContext.removeAttribute(count); + } + return EVAL_PAGE; } @@ -354,5 +383,6 @@ footer = null; message = null; filterArgs = false; + count = null; } } Modified: struts/struts1/trunk/taglib/src/main/java/org/apache/struts/taglib/logic/MessagesPresentTag.java URL: http://svn.apache.org/viewvc/struts/struts1/trunk/taglib/src/main/java/org/apache/struts/taglib/logic/MessagesPresentTag.java?rev=663836&r1=663835&r2=663836&view=diff ============================================================================== --- struts/struts1/trunk/taglib/src/main/java/org/apache/struts/taglib/logic/MessagesPresentTag.java (original) +++ struts/struts1/trunk/taglib/src/main/java/org/apache/struts/taglib/logic/MessagesPresentTag.java Thu Jun 5 23:19:40 2008 @@ -39,12 +39,19 @@ * @since Struts 1.1 */ public class MessagesPresentTag extends ConditionalTagBase { - /** + + /** * If this is set to 'true', then the <code>Globals.MESSAGE_KEY</code> * will be used to retrieve the messages from scope. */ protected String message = null; + /** + * The name of the page-scoped attribute to be populated + * with the message count of the specifie dproperty. + */ + protected String count; + public MessagesPresentTag() { name = Globals.ERROR_KEY; } @@ -57,6 +64,14 @@ this.message = message; } + public void setCount(String count) { + this.count = count; + } + + public String getCount() { + return count; + } + /** * Evaluate the condition that is being tested by this particular tag, and * return <code>true</code> if the nested body content of this tag should @@ -94,11 +109,32 @@ throw e; } - Iterator iterator = (property == null) ? am.get() : am.get(property); + // Acquire the collection of messages + Iterator iterator; + int size; + if (property == null) { + iterator = am.get(); + size = am.size(); + } else { + iterator = am.get(property); + size = am.size(property); + } + // Expose the count when specified + if (count != null) { + pageContext.setAttribute(count, new Integer(size)); + } + return (iterator.hasNext() == desired); } + public int doEndTag() throws JspException { + if (count != null) { + pageContext.removeAttribute(count); + } + return super.doEndTag(); + } + /** * Release all allocated resources. */ @@ -106,5 +142,6 @@ super.release(); name = Globals.ERROR_KEY; message = null; + count = null; } } Modified: struts/struts1/trunk/taglib/src/main/resources/META-INF/tld/struts-html.tld URL: http://svn.apache.org/viewvc/struts/struts1/trunk/taglib/src/main/resources/META-INF/tld/struts-html.tld?rev=663836&r1=663835&r2=663836&view=diff ============================================================================== --- struts/struts1/trunk/taglib/src/main/resources/META-INF/tld/struts-html.tld (original) +++ struts/struts1/trunk/taglib/src/main/resources/META-INF/tld/struts-html.tld Thu Jun 5 23:19:40 2008 @@ -5447,6 +5447,23 @@ ]]> </description> </attribute> + <attribute> + <name>count</name> + <required>false</required> + <rtexprvalue>true</rtexprvalue> + <description> + <![CDATA[ + Specifies the name of the page-scoped attribute to set + with the message count for the specified property. This + is useful, for instance, when needing to display the number + of field errors produced by a form submission. + The attribute goes out of scope after the tag executes. + + <dl><dt><b>Since:</b></dt> + <dd>Struts 1.4</dd></dl> + ]]> + </description> + </attribute> </tag> <tag> <name>multibox</name> Modified: struts/struts1/trunk/taglib/src/main/resources/META-INF/tld/struts-logic.tld URL: http://svn.apache.org/viewvc/struts/struts1/trunk/taglib/src/main/resources/META-INF/tld/struts-logic.tld?rev=663836&r1=663835&r2=663836&view=diff ============================================================================== --- struts/struts1/trunk/taglib/src/main/resources/META-INF/tld/struts-logic.tld (original) +++ struts/struts1/trunk/taglib/src/main/resources/META-INF/tld/struts-logic.tld Thu Jun 5 23:19:40 2008 @@ -1096,6 +1096,23 @@ ]]> </description> </attribute> + <attribute> + <name>count</name> + <required>false</required> + <rtexprvalue>true</rtexprvalue> + <description> + <![CDATA[ + Specifies the name of the page-scoped attribute to set + with the message count. This is useful, for instance, when + needing to total the number of messages or errors produced + by a form submission. The attribute goes out of scope after + the tag executes. + + <dl><dt><b>Since:</b></dt> + <dd>Struts 1.4</dd></dl> + ]]> + </description> + </attribute> </tag> <tag> <name>notEmpty</name>