You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@struts.apache.org by "Lukasz Lenart (JIRA)" <ji...@apache.org> on 2014/08/06 12:55:13 UTC

[jira] [Commented] (WW-3415) Issues with Token session interceptor - Blank page is returned in case of double submission

    [ https://issues.apache.org/jira/browse/WW-3415?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14087524#comment-14087524 ] 

Lukasz Lenart commented on WW-3415:
-----------------------------------

Maybe it is related to WW-3865 and WW-3865 ? Can you test with the latest available version?

> Issues with Token session interceptor - Blank page is returned in case of double submission
> -------------------------------------------------------------------------------------------
>
>                 Key: WW-3415
>                 URL: https://issues.apache.org/jira/browse/WW-3415
>             Project: Struts 2
>          Issue Type: Bug
>          Components: Core Interceptors
>    Affects Versions: 2.0.11.1
>            Reporter: Sachin Tandon
>             Fix For: 2.3.18
>
>
> Blank page is returned in case of double submission. I am using struts version - 2.0.11.1
> I have extendend TokenSessionStoreInterceptor class in my code and not changed any functionality. Following is how my class looks like
> public class MyClass extends TokenSessionStoreInterceptor{
> /**
> 	 * Default Serial Version Id
> 	 */
> 	private static final long serialVersionUID = 1L;
> 	
> 	protected String handleInvalidToken(ActionInvocation invocation) throws Exception {
>         ActionContext ac = invocation.getInvocationContext();
>         HttpServletRequest request = (HttpServletRequest) ac.get(ServletActionContext.HTTP_REQUEST);
>         HttpServletResponse response = (HttpServletResponse) ac.get(ServletActionContext.HTTP_RESPONSE);
>         String tokenName = TokenHelper.getTokenName();
>         String token = TokenHelper.getToken(tokenName);
>         if ((tokenName != null) && (token != null)) {
>             Map params = ac.getParameters();
>             params.remove(tokenName);
>             params.remove(TokenHelper.TOKEN_NAME_FIELD);
>             ActionInvocation savedInvocation = InvocationSessionStore.loadInvocation(tokenName, token);
>             if (savedInvocation != null) {
>                 // set the valuestack to the request scope
>                 ValueStack stack = savedInvocation.getStack();
>                 Map context = stack.getContext();
>                 request.setAttribute(ServletActionContext.STRUTS_VALUESTACK_KEY, stack);
>                 ActionContext savedContext = savedInvocation.getInvocationContext();
>                 savedContext.getContextMap().put(ServletActionContext.HTTP_REQUEST, request);
>                 savedContext.getContextMap().put(ServletActionContext.HTTP_RESPONSE, response);
>                 Result result = savedInvocation.getResult();
>                 if ((result != null) && (savedInvocation.getProxy().getExecuteResult())) {
>                     synchronized (context) {
>                         result.execute(savedInvocation);
>                     }
>                 }
>                 // turn off execution of this invocations result
>                 invocation.getProxy().setExecuteResult(false);
>                 return savedInvocation.getResultCode();
>             }
>         }
>         return INVALID_TOKEN_CODE;
>     }
>      protected String handleValidToken(ActionInvocation invocation) throws Exception {
>         // we know the token name and token must be there
>         String key = TokenHelper.getTokenName();
>         String token = TokenHelper.getToken(key);
>         InvocationSessionStore.storeInvocation(key, token, invocation);
>         
>         return invocation.invoke();
>     }
> }
> Now, whenever I do a double submission for a functionality like search (which gets loads of data from the database), previously saved invocation does not complete and savedInvocation.getResultCode() returns null (inside handleInvalidToken method). Due to which I receive a blank page.
> Whenever I do a debug(from eclipse) on handleInvalidToken method, savedInvocation.getResultCode() value changes from null to "success" as I  wait inside the method for sometime. 
> I have also put in savedInvocation.isExecuted() in this handleInvalidToken method and noticed that its value changes from false to true if I wait on the line of code for some time.



--
This message was sent by Atlassian JIRA
(v6.2#6252)