}
// Does a usable form bean attribute already exist?
String attribute = actionConfig.getAttribute();
String scope = actionConfig.getScope();
ActionForm instance = null;
if ("request".equals(scope)) {
instance = (ActionForm)
context.getExternalContext().getRequestMap().get(attribute);
} else if ("session".equals(scope)) {
HttpSession session = (HttpSession)
context.getExternalContext().getSession(true);
instance = (ActionForm)
context.getExternalContext().getSessionMap().get(attribute);
}
if (instance != null) {
if (fbConfig.getDynamic()) {
String className =
((DynaBean) instance).getDynaClass().getName();
if (className.equals(fbConfig.getName())) {
if (log.isDebugEnabled()) {
log.debug
(" Recycling existing DynaActionForm instance " +
"of type '" + className + "'");
}
return;
}
} else {
try {
Class configClass =
RequestUtils.applicationClass(fbConfig.getType());
if (configClass.isAssignableFrom(instance.getClass())) {
if (log.isDebugEnabled()) {
log.debug
(" Recycling existing ActionForm instance " +
"of class '" + instance.getClass().getName()
+ "'");
}
return;
}
} catch (Throwable t) {
throw new IllegalArgumentException
("Cannot load form bean class '" +
fbConfig.getType() + "'");
}
}
}
// Create a new form bean instance
if (fbConfig.getDynamic()) {
try {
DynaActionFormClass dynaClass =
DynaActionFormClass.createDynaActionFormClass(fbConfig);
instance = (ActionForm) dynaClass.newInstance();
if (log.isDebugEnabled()) {
log.debug
(" Creating new DynaActionForm instance " +
"of type '" + fbConfig.getType() + "'");
log.trace(" --> " + instance);
}
} catch (Throwable t) {
throw new IllegalArgumentException
("Cannot create form bean of type '" +
fbConfig.getType() + "'");
}
} else {
try {
instance = (ActionForm)
RequestUtils.applicationInstance(fbConfig.getType());
if (log.isDebugEnabled()) {
log.debug
(" Creating new ActionForm instance " +
"of type '" + fbConfig.getType() + "'");
log.trace(" --> " + instance);
}
} catch (Throwable t) {
throw new IllegalArgumentException
("Cannot create form bean of class '" +
fbConfig.getType() + "'");
}
}
// Configure and cache the form bean instance in the correct scope
ActionServlet servlet = (ActionServlet)
context.getExternalContext().getApplicationMap().get
(Globals.ACTION_SERVLET_KEY);
instance.setServlet(servlet);
if ("request".equals(scope)) {
context.getExternalContext().getRequestMap().put
(attribute, instance);
} else if ("session".equals(scope)) {
context.getExternalContext().getSessionMap().put