a4j:param not invoking my javscript pointed to by value attribute
robertwalker Jan 27, 2012 12:16 PMi am open to a different way to do this, but what i have seems like it should work from the documentation for RichFaces4 and JSF2
the user flow goes like this
1) there is a 'Check Out' document link implemented with h:outputLink
2) user clicks it and gets prompted with a dialog to enter check out comments implemented with rich:popupPanel
3) user enters comments and clicks 'Continue' Button on the rich:popupPanel implemented with h:link (tried h:commandLink and a4j:commandLink also)
4) a new window pops up with the contents set to the h:link outcome attribute
In my broken case, everything works except when i pass a parameter from h:link with a4j:param, whose value attribute does not resolve the javascript it points to correctly.
<h:outputLink id="promptForCommentsLink" onclick="#{rich:component('commentsDlg')}.show();return false;" value="#"> Check Out </h:outputLink>
<rich:popupPanel id="commentsDlg" modal="true"> <h:inputTextarea id="commentsId"/> <h:link id="continueLink" outcome="editorPage" <!-- editor for making changes to document --> target="_blank" <!-- open in it;s own indow --> value="Continue Check Out" onclick="#{rich:component('commentsDlg')}.hide();"> <!-- these params get assignd to backing bean properties --> <a4j:param name="dataId" value="#{ithRow.id}" assignTo="#{myController.dataId}"/> <a4j:param name="checkedOut" value="true" assignTo="#{myController.checkedOut}"/> <!-- this one is broken. assigns chars 'document.getElementById('.. to #{myController.checkOutComment} --> <a4j:param name="checkOutComment" assignTo="#{myController.checkOutComment}" noEscape="true" value="document.getElementById('myForm:dataTable:0:commentsId').value" /> </h:link> </rich:popupPanel>
I was thinking maybe
document.getElementById('myForm:dataTable:0:commentsId').value
didn't point to what i typed into the textarea, but by putting another button on the dlg and pointing it's onclick to same element id, it did indeed alert me with what it typed.
When i stop on the server side view scoped myController.setCheckOutComment(String s) method,
it gets passed the string "document.getElementById('myForm:dataTable:0:commentsId').value"
according to RF4 documentation
The a4j:param tag can be used with non-Ajax components in addition to Ajax components. This includes components which are working through the GET request, such as the h:link
and
Variables from JavaScript functions can be used for the value attribute. In such an implementation, the noEscape attribute should be set to true. Using noEscape="true", the value attribute can contain any JavaScript expression or JavaScript function invocation, and the result will be sent to the server as the value attribute.
since i seem to be playing by the jsf2/rf4 rules, i would think this would be okay.
one thing to note, if i use a4j:commandLink instead of h:link, it does indeed send
the result of javascript evaluated, however, that breaks the opening in its own window and a few other issues.
any thoughts on what might be happening, or even a better way to do this?