Author: pbenedict
Date: Sat Apr 14 15:05:31 2007
New Revision: 528882
URL: http://svn.apache.org/viewvc?view=rev&rev=528882
Log:
STR-3032: Cache unaccessed messages when redirecting
Added:
struts/struts1/trunk/core/src/main/java/org/apache/struts/chain/commands/CacheMessages.java
(with props)
Modified:
struts/struts1/trunk/core/src/main/java/org/apache/struts/chain/commands/RemoveCachedMessages.java
struts/struts1/trunk/core/src/main/resources/org/apache/struts/chain/chain-config.xml
Added:
struts/struts1/trunk/core/src/main/java/org/apache/struts/chain/commands/CacheMessages.java
URL:
http://svn.apache.org/viewvc/struts/struts1/trunk/core/src/main/java/org/apache/struts/chain/commands/CacheMessages.java?view=auto&rev=528882
==============================================================================
---
struts/struts1/trunk/core/src/main/java/org/apache/struts/chain/commands/CacheMessages.java
(added)
+++
struts/struts1/trunk/core/src/main/java/org/apache/struts/chain/commands/CacheMessages.java
Sat Apr 14 15:05:31 2007
@@ -0,0 +1,76 @@
+/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.struts.chain.commands;
+
+import org.apache.struts.Globals;
+import org.apache.struts.action.ActionMessages;
+import org.apache.struts.chain.contexts.ActionContext;
+import org.apache.struts.config.ForwardConfig;
+
+import java.util.Map;
+
+/**
+ * Copies any <code>ActionMessages</code> from the request to the session if a
+ * redirecting forward is selected and the messages were not accessed. This
+ * allows messages to be retained across a redirect, and then later released by
+ * the <code>RemoveCachedMessages</code> command. The most common use case for
+ * this command is when the validator or exception handler places messages in
+ * the request.
+ *
+ * @version $Id$
+ * @see RemoveCachedMessages
+ * @since Struts 1.4.0
+ */
+public class CacheMessages extends ActionCommandBase {
+
+ public boolean execute(ActionContext actionCtx) throws Exception {
+ ForwardConfig forwardConfig = actionCtx.getForwardConfig();
+ if ((forwardConfig != null) && forwardConfig.getRedirect()) {
+ Map request = actionCtx.getRequestScope();
+ Map session = actionCtx.getSessionScope();
+ copyUnaccessedMessages(request, session, Globals.MESSAGE_KEY);
+ copyUnaccessedMessages(request, session, Globals.ERROR_KEY);
+ }
+
+ return false;
+ }
+
+ /**
+ * Adds any <code>ActionMessages</code> object to the destination scope,
+ * stored under the specified key, if the messages were not accessed
through
+ * the source scope.
+ *
+ * @param fromScope The scope to check for unacessed messages.
+ * @param toScope The scope to copy messages into.
+ * @param key The key the messages are stored under.
+ */
+ private void copyUnaccessedMessages(Map fromScope, Map toScope, String
key) {
+ ActionMessages fromMessages = (ActionMessages) fromScope.get(key);
+ if ((fromMessages != null) && !fromMessages.isAccessed()) {
+ ActionMessages toMessages = (ActionMessages) toScope.get(key);
+ if (toMessages != null) {
+ toMessages.add(fromMessages);
+ } else {
+ toScope.put(key, fromMessages);
+ }
+ }
+ }
+}
Propchange:
struts/struts1/trunk/core/src/main/java/org/apache/struts/chain/commands/CacheMessages.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
struts/struts1/trunk/core/src/main/java/org/apache/struts/chain/commands/CacheMessages.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Modified:
struts/struts1/trunk/core/src/main/java/org/apache/struts/chain/commands/RemoveCachedMessages.java
URL:
http://svn.apache.org/viewvc/struts/struts1/trunk/core/src/main/java/org/apache/struts/chain/commands/RemoveCachedMessages.java?view=diff&rev=528882&r1=528881&r2=528882
==============================================================================
---
struts/struts1/trunk/core/src/main/java/org/apache/struts/chain/commands/RemoveCachedMessages.java
(original)
+++
struts/struts1/trunk/core/src/main/java/org/apache/struts/chain/commands/RemoveCachedMessages.java
Sat Apr 14 15:05:31 2007
@@ -29,6 +29,7 @@
* <p>Remove cached messages stored in the session.</p>
*
* @version $Id$
+ * @see CacheMessages
* @since Struts 1.3.5
*/
public class RemoveCachedMessages extends ActionCommandBase {
Modified:
struts/struts1/trunk/core/src/main/resources/org/apache/struts/chain/chain-config.xml
URL:
http://svn.apache.org/viewvc/struts/struts1/trunk/core/src/main/resources/org/apache/struts/chain/chain-config.xml?view=diff&rev=528882&r1=528881&r2=528882
==============================================================================
---
struts/struts1/trunk/core/src/main/resources/org/apache/struts/chain/chain-config.xml
(original)
+++
struts/struts1/trunk/core/src/main/resources/org/apache/struts/chain/chain-config.xml
Sat Apr 14 15:05:31 2007
@@ -109,7 +109,7 @@
<!-- Look up optional preprocess command -->
- <lookup
+ <lookup
catalogName="struts"
name="servlet-standard-preprocess"
optional="true"/>
@@ -181,7 +181,6 @@
<command
className="org.apache.struts.chain.commands.servlet.SelectForward"/>
-
<!-- Select the include uri (if any) for the current action mapping -->
<command
className="org.apache.struts.chain.commands.SelectInclude"/>
@@ -196,15 +195,17 @@
<command
className="org.apache.struts.chain.commands.servlet.CreateAction"/>
-
<!-- Execute the Action for this request -->
<command
className="org.apache.struts.chain.commands.servlet.ExecuteAction"/>
-
<!-- Perform action postprocess tasks -->
<command
className="org.apache.struts.chain.commands.servlet.ActionPostProcess"/>
+
+ <!-- Add unaccessed messages to the Session only when redirecting -->
+ <command
+ className="org.apache.struts.chain.commands.CacheMessages"/>
</chain>
<!-- ========== View Processing chain ======================== -->