[richfaces-issues] [JBoss JIRA] Updated: (RF-11364) <a4j:region> and the "process" attribute

Brian Leathem (JIRA) jira-events at lists.jboss.org
Wed Sep 7 16:55:26 EDT 2011


     [ https://issues.jboss.org/browse/RF-11364?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Brian Leathem updated RF-11364:
-------------------------------

      Fix Version/s: 3.Future
    Forum Reference: http://community.jboss.org/thread/171454, http://community.jboss.org/message/561884  (was: http://community.jboss.org/thread/171454, http://community.jboss.org/message/561884)


> <a4j:region> and the "process" attribute
> ----------------------------------------
>
>                 Key: RF-11364
>                 URL: https://issues.jboss.org/browse/RF-11364
>             Project: RichFaces
>          Issue Type: Bug
>      Security Level: Public(Everyone can see) 
>    Affects Versions: 3.3.3.Final
>            Reporter: Nicholas Oxhøj
>             Fix For: 3.Future
>
>
> Hi,
> It seems to me that the <a4j:region> doesn't work correctly together with the process="..." attribute on AJAX commands. Specifically you cannot process inputs outside the <a4j:region> even though you list them specifically in the process attribute.
> I have always thought that ajaxSingle and <a4j:region> were two functionally equivalent ways of specifying which inputs should be processed in the first phases of the JSF lifecycle - one is easy to use if you only want to process a single input and the other if you have a group of related inputs.
> In chapter [5.7.4. "Decide what to process"|http://docs.jboss.org/richfaces/latest_3_3_X/en/devguide/html/ArchitectureOverview.html#process] of the Richfaces 3.3.X documentation, it is stated that: The "_process_" attribute allows to define the ids of components to be processed together with the component which is marked as ajaxSingle *+or wrapped to region+*.
> As I understand this, the example in the documentation:
> {code:xml}
> <h:inputText value="#{bean.name}" id="name">
>     <a4j:support ajaxSingle="true" process="email" event="onblur" reRender="someOut"/>
> </h:inputText>
> <h:inputTextarea value="#{bean.description}" id="desc" />
> <h:inputText value="#{bean.email}" id="email">
>     <a4j:support ajaxSingle="true" process="name" event="onblur" reRender="someOut"/>
> </h:inputText>
> {code}
> should be functionally equivalent to the following code:
> {code:xml}
> <a4j:region>
>     <h:inputText value="#{bean.name}" id="name">
>         <a4j:support process="email" event="onblur" reRender="someOut"/>
>    </h:inputText>
> </a4j:region>
> <h:inputTextarea value="#{bean.description}" id="desc" />
> <h:inputText value="#{bean.email}" id="email">
>    <a4j:support ajaxSingle="true" process="name" event="onblur" reRender="someOut"/>
> /h:inputText>
> {code}
> But this doesn't work as expected. The "email" component is no longer processed when focus leaves the "name" component.
> The reason for this is found in the class UIAjaxRegion, where all the "processing methods" (processDecodes, processValidators, and processUpdates) contains code similar to the following:
> {code}
> if (ajaxContext.isAjaxRequest() && null != ajaxSingleClientId) {
>     invokeOnComponent(context, ajaxSingleClientId, new ContextCallbackWrapper(updateCallback));
>     Set<String> areasToProcess = ajaxContext.getAjaxAreasToProcess();
>     if(null != areasToProcess){
>         for (String areaId : areasToProcess) {
>             invokeOnComponent(context, areaId, new ContextCallbackWrapper(updateCallback));
>         }
>     }
> } else {
>     super.processUpdates(context);
> }
> {code}
> So the value of the process attribute (retrieved through ajaxContext.getAjaxAreasToProcess), is only used if the AJAX command has ajaxSingle="true". I don't understand why the "process" attribute isn't used, regardless of the value of the ajaxSingle attribute???
> Looking at the code, I thought that a workaround would the be to just add ajaxSingle="true" to the <a4j:support> so that it would again look like:
> {code:xml}
> <a4j:support ajaxSingle="true" process="email" event="onblur" reRender="someOut"/>
> {code}
> But this doesn't work either. Although the code above _will_ now enter the first branch and therefore loop through the areaIds specified in the process attribute, it will only find them if they are located inside the <a4j:region> itself, since the invokeOnComponent() is implicitely called on the  UIAjaxRegion.
> Regards,
> Nicholas Oxhøj

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

       



More information about the richfaces-issues mailing list