[
https://issues.jboss.org/browse/RF-11365?page=com.atlassian.jira.plugin.s...
]
Christophe Noel commented on RF-11365:
--------------------------------------
Hello,
I encountered the same issue, using Liferay Faces Bridge 3.1.0 rc2.
Same issue using: RF 4.2.0 and 4.2.2.
{<a4j:commandButton id="myTestButton"
value='testComplete'
onbegin="alert('begin');"
actionListener="#{uiSearchBean.listener}"
oncomplete="alert('complete)';"
</a4j:commandButton>}
RF log:
{debug[10:41:52.082]: New request added to queue. Queue requestGroupingId changed to
A8569:uiSearchForm:matching-datatable:0:myTestButton
debug[10:41:52.083]: Queue will wait 0ms before submit
debug[10:41:52.084]: richfaces.queue: will submit request NOW
info [10:41:53.488]: Received 'begin' event from <input
id=A8569:uiSearchForm:matching-datatable:0:myTestButton ...>
info [10:41:53.557]: Received 'beforedomupdate' event from <input
id=A8569:uiSearchForm:matching-datatable:0:myTestButton ...>
debug[10:41:53.557]: Server returned responseText:
<partial-response><changes><update
id="A8569:uiSearchForm:j_idt12"><![CDATA[<span
id="A8569:uiSearchForm:j_idt12"> <div id="messageD">
<table id="messageT" class="rich-messages"> </table>
</div></span>]]></update><update
id="javax.faces.ViewState"><![CDATA[1595359017373670725:-6482414893939857634]]></update><extension
id="A8569org.richfaces.extension"><complete>alert('complete');;</complete></extension></changes></partial-response>
info [10:41:53.558]: Listing content of response changes element:
Element update for id=A8569:uiSearchForm:j_idt12
<update id="A8569:uiSearchForm:j_idt12"><![CDATA[<span
id="A8569:uiSearchForm:j_idt12"> <div id="messageD">
<table id="messageT" class="rich-messages"> </table>
</div></span>]]></update>
Element update for id=javax.faces.ViewState
<update
id="javax.faces.ViewState"><![CDATA[1595359017373670725:-6482414893939857634]]></update>
Element extension for id=A8569org.richfaces.extension
<extension
id="A8569org.richfaces.extension"><complete>alert('complete');;</complete></extension>
debug[10:41:53.559]: richfaces.queue: ajax submit successfull
debug[10:41:53.559]: richfaces.queue: Nothing to submit
info [10:41:53.560]: Received 'success' event from <input
id=A8569:uiSearchForm:matching-datatable:0:myTestButton ...>
info [10:41:53.560]: Received 'complete' event from <input
id=A8569:uiSearchForm:matching-datatable:0:myTestButton ...>}
onbeforedomupdate and oncomplete not working in Portlet environment
-------------------------------------------------------------------
Key: RF-11365
URL:
https://issues.jboss.org/browse/RF-11365
Project: RichFaces
Issue Type: Bug
Security Level: Public(Everyone can see)
Affects Versions: 4.0.0.Final
Reporter: Detlef Pleiss
Fix For: 5-Future
example page:
{code}
<ui:composition
xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich">
<h:head/>
<h:form>
<h:panelGrid columns="2">
<h:outputText value="Text:" />
<h:inputText value="#{echoBean.text}" >
<a4j:ajax event="keyup"
onbeforesubmit="alert('beforesubmit')"
onbegin="alert('begin')"
onbeforedomupdate="alert('beforedomupdate')"
oncomplete="alert('complete')"
render="text,count" listener="#{echoBean.countListener}"/>
</h:inputText>
<h:outputText value="Echo:" />
<h:outputText id="text" value="#{echoBean.text}" />
<h:outputText value="Count:" />
<h:outputText id="count" value="#{echoBean.count}" />
</h:panelGrid>
</h:form>
</ui:composition>
{code}
The alerts for onbeforedomupdate and oncomplete do not appear in a portal environment;
they do in a non-portal web environment.
The Ajax XML response in a non portal web environment contains the tag <extension
id="org.richfaces.extension"> with the Javascript code from the named
attributes.
But, in a portal environment the id gets prefixed like i.e. <extension
id="A3331org.richfaces.extension">
In fact Richfaces asks for this prefix in richfaces-core-api-4.0.0.Final-sources :
org.richfaces.renderkit.util.CoreAjaxRendererUtils.java
line 96 by calling facesContext.getExternalContext().encodeNamespace(EXTENSION_ID))
In a Servlet environment this leaves EXTENSION_ID = "org.richfaces.extension"
unchanged, but in a Portlet environment its function is to
"Return the specified name, after prefixing it with a namespace that ensures that it
will be unique within the context of a particular page" (quoted from Javadoc).
Only, the Javascript meant to react on the extension tag is hardcoded to react on the ID
"org.richfaces.extension" only without any prefix:
META-INF/resources/richfaces.js line 333 :
{code}
var getExtensionResponseElement = function(responseXML) {
return jQuery("partial-response extension#org\\.richfaces\\.extension",
responseXML);
};
{code}
So, in a Portlet environment the partial-response/extension is ignored due to the
prefixed ID.
A possible solution might be to have the Javascript accept any prefix in front of the ID,
like:
{code}
var getExtensionResponseElement = function(responseXML) {
return jQuery("partial-response
extension[id$='org\\.richfaces\\.extension']", responseXML);
};
{code}
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see:
http://www.atlassian.com/software/jira