myfaces-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "David Paterson (JIRA)" <>
Subject [jira] Commented: (TOMAHAWK-51) Popup windows: bad position on screen (<t:popup> and <x:inputSuggest> components)
Date Thu, 09 Nov 2006 22:28:39 GMT
    [ ] 
David Paterson commented on TOMAHAWK-51:

We were having a similar problem as mentioned with the main body of the page being rendered
inside a relative positioned DIV.   Also this DIV is aligned center which makes the problem
worse in IE 7.   In IE 7 even if I find the correct adjustment based on the relative position
of the parent DIV the offset is based on the center of the rendered DIV not the top and left
coordinates.  So after the correction the pop up still gets rendered a mile off to the right
of the page.

My fix was a bit of a hack but it's working well for us.  What I did was modify the JavaScript
constructor function that is first called when the t:popup is rendered.  At the end of this
function I create a new DIV outside the main content DIV to serve a container for my Popup
DIVs and then subsequently move each of my new Popup DIV into this container as they are created.
 This then allows me to simple use absolute positioning for the Popup based on cursor position
as was originally intended.  

I also had to make a change to HtmlPopupRenderer.encodeEnd() so that the DIV is rendered first,
before the JavaScript, otherwise the above JavaScript mod doesn't work.

> Popup windows: bad position on screen (<t:popup> and <x:inputSuggest> components)
> ---------------------------------------------------------------------------------
>                 Key: TOMAHAWK-51
>                 URL:
>             Project: MyFaces Tomahawk
>          Issue Type: Bug
>          Components: Popup
>         Environment: Windows XP Pro SP2, Tomcat 4.1.30, JDK 1.4.2_09
>            Reporter: Javier Alperte
>         Assigned To: Werner Punz
> Error positioning the popup windows shown by the components: <t:popup> and <x:inputSuggest>
> They don't have in consideration the relative position of the component in the page,
and it's a problem if you place the component inside a DIV, where the positions must be relatives
and not globals. 
> Solution: calculate the popup position based on component relative positions. For do
that we need to assign an ID to the component in order to get the Document Element associated
with it, and then we can use the HTML Object Position to calculate where to show the popup.
> Ej: Our component must generate a function like this:
>    function showMenu_<COMPONENT_ID>(event) {
>            var menuDiv = document.getElementById(<MENU_DIV_ID>);
>            var componentElement = document.getElementById(<COMPONENT_ID>);
>            if ( == 'hidden' && event) { //Show menu
>        = 'visible';
>        = 'block';
>        = 3000;
>        = componentElement.offsetTop + 10;
>                 var left = componentElement.offsetLeft + componentElement.offsetWidth
- menudiv.offsetWidth;
>                 if (left < 0) //Move menu to the right side if it is too close to
the left
>                     left += menudiv.offsetWidth;
>        = left;
>             } else {
>        = 'hidden';
>             }
>         }

This message is automatically generated by JIRA.
If you think it was sent incorrectly contact one of the administrators:
For more information on JIRA, see:


View raw message