欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

struts2 2.3版本 action不能提交?参数的原因是源码中截取了?后的

程序员文章站 2022-07-12 16:14:37
...

 

struts2 2.3版本  action不能提交?参数的原因是源码中截取了?后的

 

 

FormTag--》Form(evaluateClientSideJsEnablement)--》ServletUrlRenderer(renderFormUrl)

 

从继承树看出form继承closingbean,closingbean继承uibean(CTRL+单击)

 

 

 

 

从继承树看出form继承closingbean,closingbean继承uibean

 

 

 

fromtag 调用form构造函数

 

Form extends ClosingUIBean

ClosingUIBean extends UIBean

 

 

ClosingUIBean中:

 

 public boolean start(Writer writer) {

        boolean result = super.start(writer);

        try {

            evaluateParams();

 

            mergeTemplate(writer, buildTemplateName(openTemplate, getDefaultOpenTemplate()));

        } catch (Exception e) {

            LOG.error("Could not open template", e);

        }

 

        return result;

    }

 

 

 

调用uibean中:

evaluateParams{

populateComponentHtmlId

 

}

 

 

uiBean:

populateComponentHtmlId(form);

 

Form:

   @Override

    protected void populateComponentHtmlId(Form form) {

        if (id != null) {

            addParameter("id", escape(id));

        }

 

        // if no id given, it will be tried to generate it from the action attribute

        // by the urlRenderer implementation

        urlRenderer.renderFormUrl(this);

    }

 

 

ServletUrlRenderer:

 

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);

}

 

 

  • struts2 2.3版本  action不能提交?参数的原因是源码中截取了?后的
            
    
    博客分类: struts struts 
  • 大小: 49.8 KB
相关标签: struts