struts-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Rubens Gomes <rubens_go...@hotmail.com>
Subject Re: Request Parameter not being set on Action
Date Wed, 02 Aug 2017 14:23:02 GMT
I noticed that the request_locale was not found, and that's fine.  However, the pageUrl was
found in the HttpParameters and it is not being set on the action.  Below is the Action class
and struts.xml:


@SuppressWarnings("serial")
@Results( {
  @Result(name=Action.INPUT,
          location="/WEB-INF/content/${device}/error.jsp",
          type="dispatcher"),
  @Result(name=Action.SUCCESS,
          location="${redirectURL}",
          type="redirect")
} )
public class ChangeLocaleAction extends BaseAction
{
    private String pageUrl;


    public ChangeLocaleAction()
    {
        super();
    }


    @Override
    public void validate()
    {

        if(StringUtils.isBlank(pageUrl))
        {
            addActionError( getText("error.urlmissing") );
        }

    }


    @Override
    public String execute()
    {

        try
        {
            pageUrl = URLDecoder.decode(pageUrl, "UTF-8");
            HttpServletRequest request = getRequest();

            if(request == null)
            {
                throw new IllegalArgumentException("HTTP request not found.");
            }

            /*
             * The redirect automatically inserts the context path.  We need
             * to remove the context path in redirectURL to prevent duplicate
             * contextPaths in the redirect.
             */
            String contextPath = request.getContextPath();

            if (pageUrl.startsWith(contextPath))
            {
                pageUrl = pageUrl.replaceFirst(contextPath, "");
                logger.debug("redirectURL set to [{}]", pageUrl);
            }

        }
        catch(UnsupportedEncodingException ex)
        {
            throw new RuntimeException("error decoding url: " + pageUrl, ex);
        }

        return SUCCESS;
    }


    /**
     * @return the pageUrl
     */
    public String getPageUrl()
    {
        return pageUrl;
    }


    /**
     * @param pageUrl the pageUrl to set
     */
    public void setPageUrl(String pageUrl)
    {
        this.pageUrl = pageUrl;
    }


}



<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
    "http://struts.apache.org/dtds/struts-2.5.dtd">

<struts>
  <constant name="struts.devMode" value="true" />

  <constant name="struts.action.extension" value="do" />

  <constant name="struts.convention.action.packages" value="com.ezlista.web.struts2.action"
/>
  <constant name="struts.convention.classes.reload" value="true" />
  <constant name="struts.convention.default.parent.package" value="ezlista-package" />
  <constant name="struts.convention.package.locators" value="action" />
  <constant name="struts.convention.package.locators.basePackage" value="com.ezlista.web.struts2"
/>
  <constant name="struts.convention.result.path" value="/WEB-INF/content/"/>

  <constant name="struts.custom.i18n.resources" value="messages" />

  <constant name="struts.date.format" value="dd/MM/yyyy hh:mm" />

  <constant name="struts.freemarker.templatesCache" value="true" />

  <constant name="struts.i18n.encoding" value="UTF-8" />

  <constant name="struts.serve.static" value="true" />

  <constant name="struts.ui.theme" value="simple" />
  <constant name="struts.ui.templateDir" value="template" />


  <package name="ezlista-package" extends="json-default">

    <interceptors>

      <interceptor name="valueStack"
                   class="com.ezlista.web.struts2.interceptor.ValueStackInterceptor" />

      <interceptor-stack name="ezlistaStack">
        <interceptor-ref name="valueStack" />
        <interceptor-ref name="defaultStack">
          <param name="exception.logEnabled">true</param>
          <param name="exception.logLevel">ERROR</param>
          <param name="exception.logCategory">com.ezlista</param>
          <param name="params.excludeParams">dojo\..*,^struts\..*,^session\..*,^request\..*,^application\..*,^servlet(Request|Response)\..*,parameters\...*,^_csrf</param>
        </interceptor-ref>
      </interceptor-stack>

    </interceptors>

    <default-interceptor-ref name="ezlistaStack" />

    <default-action-ref name="default-action" />

    <global-results>
      <result name="login" type="redirectAction">/view-login.do</result>
      <result name="error">/WEB-INF/content/${device}/error.jsp</result>
      <result name="exception">/WEB-INF/content/${device}/error.jsp</result>
      <result name="warning">/WEB-INF/content/${device}/warning.jsp</result>
    </global-results>

    <global-exception-mappings>
      <exception-mapping exception="java.lang.Exception" result="exception" />
    </global-exception-mappings>

    <action name="default-action" class="com.ezlista.web.struts2.action.DefaultAction"
/>

  </package>


  <package name="home" extends="ezlista-package" namespace="/">

    <action name="about" class="com.ezlista.web.struts2.action.DummyAction">
      <result>/WEB-INF/content/${device}/about.jsp</result>
    </action>

    <action name="help" class="com.ezlista.web.struts2.action.DummyAction">
      <result>/WEB-INF/content/${device}/help.jsp</result>
    </action>

    <action name="language-help" class="com.ezlista.web.struts2.action.DummyAction">
      <result>/WEB-INF/content/${device}/language-help.jsp</result>
    </action>

    <action name="pending-email-help" class="com.ezlista.web.struts2.action.DummyAction">
      <result>/WEB-INF/content/${device}/pending-email-help.jsp</result>
    </action>

    <action name="privacy" class="com.ezlista.web.struts2.action.DummyAction">
      <result>/WEB-INF/content/${device}/privacy.jsp</result>
    </action>

    <action name="remember-help" class="com.ezlista.web.struts2.action.DummyAction">
      <result>/WEB-INF/content/${device}/remember-help.jsp</result>
    </action>

    <action name="terms" class="com.ezlista.web.struts2.action.DummyAction">
      <result>/WEB-INF/content/${device}/terms.jsp</result>
    </action>

    <action name="terms-service" class="com.ezlista.web.struts2.action.DummyAction">
      <result>/WEB-INF/content/${device}/terms-service.jsp</result>
    </action>

    <action name="view-session-timeout" class="com.ezlista.web.struts2.action.DummyAction">
      <result>/WEB-INF/content/${device}/session-timeout.jsp</result>
    </action>

  </package>


</struts>








________________________________________
From: Lukasz Lenart <lukaszlenart@apache.org>
Sent: Wednesday, August 2, 2017 5:01 AM
To: Struts Users Mailing List
Subject: Re: Request Parameter not being set on Action

2017-08-02 8:34 GMT+02:00 Rubens Gomes <rubens_gomes@hotmail.com>:
> The request below is sent , but the parameters (request_locale/pageUrl) are not set on
the action.
>
> http://localhost:8080/change-locale.do?request_locale=en&pageUrl=%2Fview-login.do

The "request_locale" parameter is a special parameter that tells
I18NInterceptor to change locale, it will be removed after that so you
cannot access it in an action.
If you need to access locale in an action and assuming your extending
the ActionSupport class just call the "getLocale()" method.

Regarding the "pageUrl" parameter, can you start with a simple
example? Or maybe post your struts.xml plus an action's class?



Regards
--
Ɓukasz
+ 48 606 323 122 http://www.lenart.org.pl/

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


Mime
View raw message