Hi there,
I have a page that contains two commandLinks:
<h:commandLink
value="#{msgs.button_export}"
action="#{reportTemplateMgmt.exportReportTemplate}"
styleClass="button">
<f:param name="objectId" value="#{reportTemplate.id}"/>
</h:commandLink>
<h:commandLink
value="#{msgs.button_generate}"
onclick="openPopup()"
styleClass="button"/>
The first link generates a file on the server that the user can then save with
the usual save/open dialog box of IE. The page does not get refreshed.
The second link opens a popup window and also causes the parent window to
reload because the onclick is extended with oamSubmitForm.
There is an interesting problem with this on IE 7 (works fine in FireFox): When
the user clicks on the first link the file is offered for saving/opening. When
he then clicks on the second link the popup window is openend. However, the
first link is also executed.
I think the reason for this is because the first link sets the hidden element
formName + ":" + "_clid" as found in oamSubmitForm. When the user clicks on the
second link this hidden element is set again. However, for some reason IE
cannot find the element in the form and adds another hidden input field for
this element. I put a few debug statements in a copy of oamSetupForm to check
what's going on. The function oamSetupForm uses the following line to check
whether the hidden element is already in the form:
if(typeof form.elements[name]=='undefined')
This, in fact, returns undefined. When I manually walk through all elements in
the form using
var els = form.elements;
for (var i = 0; i < els.length; i++) {
}
then the element is found. I could not reproduce this behaviour in a simple
test file. It would always find the hidden element after it had been added.
Since the linkId of the first link is sent together with the linkId of the
second link both get executed.
Did anyone else encounter this problem? What's the best way to solve this?
Thanks,
Roland