You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@struts.apache.org by "zhouyanming (JIRA)" <ji...@apache.org> on 2013/07/24 05:14:49 UTC
[jira] [Created] (WW-4151) add getter methods for
org.apache.struts2.components.Form
zhouyanming created WW-4151:
-------------------------------
Summary: add getter methods for org.apache.struts2.components.Form
Key: WW-4151
URL: https://issues.apache.org/jira/browse/WW-4151
Project: Struts 2
Issue Type: Improvement
Reporter: zhouyanming
I'm trying implement my own org.apache.struts2.components.UrlRenderer to replace default org.apache.struts2.components.ServletUrlRenderer
{code:java}
public void renderFormUrl(Form formComponent) {
String namespace = formComponent.determineNamespace(
formComponent.namespace, formComponent.getStack(),
formComponent.request);
String action;
if (formComponent.action != null) {
action = formComponent.findString(formComponent.action);
} else {
// no action supplied? ok, then default to the current request
// (action or general URL)
ActionInvocation ai = (ActionInvocation) formComponent.getStack()
.getContext().get(ActionContext.ACTION_INVOCATION);
if (ai != null) {
action = ai.getProxy().getActionName();
namespace = ai.getProxy().getNamespace();
} else {
// hmm, ok, we need to just assume the current URL cut down
String uri = formComponent.request.getRequestURI();
action = uri.substring(uri.lastIndexOf('/'));
}
}
Map actionParams = null;
if (action != null && action.indexOf("?") > 0) {
String queryString = action.substring(action.indexOf("?") + 1);
actionParams = urlHelper.parseQueryString(queryString, false);
action = action.substring(0, action.indexOf("?"));
}
ActionMapping nameMapping = actionMapper
.getMappingFromActionName(action);
String actionName = nameMapping.getName();
String actionMethod = nameMapping.getMethod();
final ActionConfig actionConfig = formComponent.configuration
.getRuntimeConfiguration().getActionConfig(namespace,
actionName);
if (actionConfig != null) {
ActionMapping mapping = new ActionMapping(actionName, namespace,
actionMethod, formComponent.parameters);
String result = urlHelper
.buildUrl(formComponent.actionMapper
.getUriFromActionMapping(mapping),
formComponent.request, formComponent.response,
actionParams, null, formComponent.includeContext,
true);
formComponent.addParameter("action", result);
// let's try to get the actual action class and name
// this can be used for getting the list of validators
formComponent.addParameter("actionName", actionName);
try {
Class clazz = formComponent.objectFactory
.getClassInstance(actionConfig.getClassName());
formComponent.addParameter("actionClass", clazz);
} catch (ClassNotFoundException e) {
// this is OK, we'll just move on
}
formComponent.addParameter("namespace", namespace);
// if the name isn't specified, use the action name
if (formComponent.name == null) {
formComponent.addParameter("name", actionName);
}
// if the id isn't specified, use the action name
if (formComponent.getId() == null && actionName != null) {
formComponent.addParameter("id",
formComponent.escape(actionName));
}
} else if (action != null) {
// Since we can't find an action alias in the configuration, we just
// assume the action attribute supplied is the path to be used as
// the URI this form is submitting to.
// Warn user that the specified namespace/action combo
// was not found in the configuration.
if (namespace != null && LOG.isWarnEnabled()) {
LOG.warn("No configuration found for the specified action: '"
+ actionName
+ "' in namespace: '"
+ namespace
+ "'. Form action defaulting to 'action' attribute's literal value.");
}
String result = urlHelper.buildUrl(action, formComponent.request,
formComponent.response, null, null,
formComponent.includeContext, true);
formComponent.addParameter("action", result);
// namespace: cut out anything between the start and the last /
int slash = result.lastIndexOf('/');
if (slash != -1) {
formComponent.addParameter("namespace",
result.substring(0, slash));
} else {
formComponent.addParameter("namespace", "");
}
// name/id: cut out anything between / and . should be the id and
// name
String id = formComponent.getId();
if (id == null) {
slash = result.lastIndexOf('/');
int dot = result.indexOf('.', slash);
if (dot != -1) {
id = result.substring(slash + 1, dot);
} else {
id = result.substring(slash + 1);
}
formComponent.addParameter("id", formComponent.escape(id));
}
}
// WW-1284
// evaluate if client-side js is to be enabled. (if validation
// interceptor does allow validation eg. method is not filtered out)
formComponent.evaluateClientSideJsEnablement(actionName, namespace,
actionMethod);
}
{code}
all fields are protected and only have setter method,can not access those fields or methods to build form action.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira