[ http://jira.undersunconsulting.com/browse/OFBIZ-720?page=comments#action_13610 ] Jacopo Cappellato commented on OFBIZ-720: -----------------------------------------
Instead of using cookies, maybe a better solution is to use the 'window' JavaScript element: the name of a lookup window could be equal to the name of the screen, than we could pass the name of the caller window to the called lookup. Does it make sense? > 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; -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://jira.undersunconsulting.com/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira
