> popups not identifying opener field properly
> --------------------------------------------
>
> Key: OFBIZ-720
> URL:
http://jira.undersunconsulting.com/browse/OFBIZ-720> Project: [OFBiz] Open For Business
> Type: Bug
> Components: common
> Versions: SVN
> Environment: ubuntu breezy, jdk 1.4.2
> Reporter: Romà Ferré Añaños
> Assignee: Jira Administrator
> Attachments: lookup.ftl
>
>
> We found that in a screen form with more than one popup field, the current mechanism fails to properly identify the field (in the main window) which was to receive the selected value.
> In a typical scenario, only one of the fields would receive the result of any of the popups.
> We inspected the javascript code in "framework/common/webcommon/includes/lookup.ftl" and found that the mechanism for locating the opener field depended on the URL parameter "id". This parameter is not properly passed on successive submits (or pages) in the popup, and it only takes the first submit on the "Lookup" button to lose the "id" parameter.
> We have designed a solution for this bug which relies on cookies, so that we can remember the id between pages.
> We rely upon typical javascript setCookie/getCookie functions.
> Here is the main part of our solution:
> //let us prepare a regular expression which will alow us to extract the id parameter from the URL
> // => this is guaranteed to work the first time we open up the popup
> var re_id = new RegExp('id=(\\d+)');
> //We set num_id to -1 in case of "no match" to remember this condition later
> var num_id = (re_id.exec(String(window.location))
> ? new Number(RegExp.$1) : -1);
> //Now we want to obtain the obj_caller...
> var obj_caller;
> if(num_id!=-1){
> //an id was passed in, let us remember it...
> setCookie("__popupNumId__",num_id);
> obj_caller = (window.opener ? window.opener.lookups[num_id] : null);
> }
> else{
> //No id was passed in, let us check if we have a remembered cookie
> //let us see if we have a previous num_id saved as a cookie
> var oldNumId=getCookie("__popupNumId__");
> if(oldNumId){
> //we found a remembered id
> obj_caller = (window.opener ? window.opener.lookups[oldNumId] : null);
> }
> else{
> //oops!! abnormal situation
> }
> }
> if (obj_caller == null)
> obj_caller = window.opener;