struts-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "zhouyanming (JIRA)" <j...@apache.org>
Subject [jira] [Created] (WW-4151) add getter methods for org.apache.struts2.components.Form
Date Wed, 24 Jul 2013 03:14:49 GMT
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

Mime
View raw message