myfaces-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Rene O (JIRA)" <...@myfaces.apache.org>
Subject [jira] [Commented] (MYFACES-3881) CLIENT_WINDOW_MODE generates new windowid even if one exists
Date Mon, 14 Apr 2014 09:31:16 GMT

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

Rene O commented on MYFACES-3881:
---------------------------------

I have found a workaround for my current usecase:
My idea is similar to client mode (javax.faces.CLIENT_WINDOW_MODE -> client), but doesn't
use requestparam 'mfRid'.

Implementation:
- using of deltaspikes @WindowScoped for my beans (@ViewScoped doesn't work here)
- using of special viewAction

{code:title=web.xml}
	<context-param>
		<param-name>javax.faces.CLIENT_WINDOW_MODE</param-name>
		<param-value>url</param-value>
	</context-param>
{code}

{code:title=mypage.xhtml}
	<f:metadata>
	   	<f:viewAction action="#{initCtr.initApplication()}"/>
	</f:metadata>
{code}	
	
	
{code:title=InitCtr.java}
	public void initApplication(){
		FacesContext ctx = FacesContext.getCurrentInstance();
		ExternalContext exCtx = ctx.getExternalContext();

		String windowid = exCtx.getClientWindow().getId();
		System.out.println("windowid: "+windowid);

		//get current requestparams
		Map<String,String> reqparams = exCtx.getRequestParameterMap();

		//only redirect if no jfwid exists yet or an old unknown jfwid is used within the browser
		if(!reqparams.containsKey("jfwid") || !windowid.equals(reqparams.get("jfwid"))){
			try {
				StringBuilder sb = new StringBuilder();
				sb.append("?");

				//append all requestparams
				for (Map.Entry<String,String> entry : reqparams.entrySet()) {
					sb.append(entry.getKey()).append("=").append(entry.getValue()).append("&");
				}

				//append jfwid to be able to decide if a new 'windowsession' is needed or not
				sb.append("jfwid=").append(exCtx.getClientWindow().getId());

				//redirect to same page with new added jfwid param
				exCtx.redirect(exCtx.getRequestContextPath()+exCtx.getRequestServletPath()+sb.toString());
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
{code}
A new showcase (jsftest22_new.zip) is attached: http://localhost:8080/jsftest22/mypage.jsf

> CLIENT_WINDOW_MODE generates new windowid even if one exists
> ------------------------------------------------------------
>
>                 Key: MYFACES-3881
>                 URL: https://issues.apache.org/jira/browse/MYFACES-3881
>             Project: MyFaces Core
>          Issue Type: Bug
>    Affects Versions: 2.2.2
>         Environment: java 7, tomcat 7.0.50
>            Reporter: Rene O
>         Attachments: jsftest22.zip, jsftest22_new.zip
>
>
> If you use @ViewScoped beans and activate CLIENT_WINDOW_MODE (url or client) a page refresh
generates a new windowid although the application in the current browser window already has
a windowid.
> I think a new windowid should only be generated, if no windowid exists, e.g. open new
window or tab with the same url.
> <context-param>
>    <param-name>javax.faces.CLIENT_WINDOW_MODE</param-name>
>    <param-value>url</param-value>
>    <!--client doesn't work too-->
> </context-param>
> A testcase is attached.
> call url: http://localhost:8080/jsftest22/mypage.jsf
> Fill some values into field
> Press F5 to refresh the page
> => new windowid is generated => inputdata is lost, because a new @ViewScoped bean
was created



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

Mime
View raw message