1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.struts.chain.commands;
19
20 import org.apache.commons.logging.Log;
21 import org.apache.commons.logging.LogFactory;
22 import org.apache.struts.chain.contexts.ActionContext;
23 import org.apache.struts.config.ActionConfig;
24 import org.apache.struts.config.ForwardConfig;
25 import org.apache.struts.config.ModuleConfig;
26
27 /***
28 * <p>Select and cache a <code>ForwardConfig</code> that returns us to the
29 * input page for the current action, if any.</p>
30 *
31 * @version $Rev: 421119 $ $Date: 2005-06-04 10:58:46 -0400 (Sat, 04 Jun 2005)
32 * $
33 */
34 public abstract class AbstractSelectInput extends ActionCommandBase {
35
36
37 /***
38 * <p> Provide Commons Logging instance for this class. </p>
39 */
40 private static final Log LOG = LogFactory.getLog(AbstractSelectInput.class);
41
42
43
44 /***
45 * <p>Select and cache a <code>ForwardConfig</code> for the input page for
46 * the current request.</p>
47 *
48 * @param actionCtx The <code>Context</code> for the current request
49 * @return <code>false</code> so that processing continues
50 * @throws Exception if thrown by the Action class
51 */
52 public boolean execute(ActionContext actionCtx)
53 throws Exception {
54
55 Boolean valid = actionCtx.getFormValid();
56
57 if ((valid != null) && valid.booleanValue()) {
58 return (false);
59 }
60
61
62 ActionConfig actionConfig = actionCtx.getActionConfig();
63 ModuleConfig moduleConfig = actionConfig.getModuleConfig();
64
65
66 ForwardConfig forwardConfig;
67 String input = actionConfig.getInput();
68
69 if (moduleConfig.getControllerConfig().getInputForward()) {
70 if (LOG.isTraceEnabled()) {
71 LOG.trace("Finding ForwardConfig for '" + input + "'");
72 }
73
74 forwardConfig = actionConfig.findForwardConfig(input);
75
76 if (forwardConfig == null) {
77 forwardConfig = moduleConfig.findForwardConfig(input);
78 }
79 } else {
80 if (LOG.isTraceEnabled()) {
81 LOG.trace("Delegating to forward() for '" + input + "'");
82 }
83
84 forwardConfig = forward(actionCtx, moduleConfig, input);
85 }
86
87 if (LOG.isDebugEnabled()) {
88 LOG.debug("Forwarding back to " + forwardConfig);
89 }
90
91 actionCtx.setForwardConfig(forwardConfig);
92
93 return (false);
94 }
95
96
97
98 /***
99 * <p>Create and return a <code>ForwardConfig</code> representing the
100 * specified module-relative destination.</p>
101 *
102 * @param context The context for this request
103 * @param moduleConfig The <code>ModuleConfig</code> for this request
104 * @param uri The module-relative URI to be the destination
105 * @return ForwardConfig representing destination
106 */
107 protected abstract ForwardConfig forward(ActionContext context,
108 ModuleConfig moduleConfig, String uri);
109 }