[richfaces-issues] [JBoss JIRA] (RF-12730) Render and Oncomplete attributes are not evaluated if command is in conditionally rendered subtree

Lukáš Fryč (JIRA) jira-events at lists.jboss.org
Wed Jan 16 04:12:22 EST 2013


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

Lukáš Fryč updated RF-12730:
----------------------------

    Assignee:     (was: Lukáš Fryč)

    
> Render and Oncomplete attributes are not evaluated if command is in conditionally rendered subtree
> --------------------------------------------------------------------------------------------------
>
>                 Key: RF-12730
>                 URL: https://issues.jboss.org/browse/RF-12730
>             Project: RichFaces
>          Issue Type: Bug
>      Security Level: Public(Everyone can see) 
>          Components: component-a4j-core, core
>    Affects Versions: 4.2.0.Final
>         Environment: MyFaces 2.1.6 / Mojarra 2.1.7
> Tomcat 6.0.35 / 7.0.26
>            Reporter: Michael Heinen
>         Attachments: onc333.war, onc42.war, RF-12145.zip, zOnc333WithLibs.war, zOnc42New.war, zOnc42WithLibs.war
>
>   Original Estimate: 3 hours
>  Remaining Estimate: 3 hours
>
> Sample use case:
> The last page of a wizard contains a commandButton with an EL expressions in the oncomplete attribute and in the render attribute.
> This button renders an outer component in order to close the wizard. The button itself is not rendered anymore after clicking it.
> As a consequence the EL expressions of the oncomplete attribute and of the render attribute is not evaluated after the invocation of an actionListener.
> This worked well with richfaces 3.3.3, therefore it's a critical regression.
> I'll attach a sample webApp for richfaces 4.2 and for riochfaces 3.3.3
> Note that the render attribute of f:ajax is evaluated correctly.
> These attributes of the clicked command must be evaluated in phase render response in all cases.
> ----
> {code:title="OncController.java"}
> package com;
> import java.util.Map;
> import javax.faces.bean.ManagedBean;
> import javax.faces.bean.SessionScoped;
> import javax.faces.context.FacesContext;
> import javax.faces.event.ActionEvent;
> @ManagedBean(name = "OncController")
> @SessionScoped
> public class OncController
> {
>   private boolean innerShown = true;
>   
>   private int calls = 0;
>   public OncController()
>   {
>   }
>   public boolean isInnerShown()
>   {
>     return innerShown;
>   }
>   public void setInnerShown(boolean aInnerShown)
>   {
>     innerShown = aInnerShown;
>   }
>   
>   public void clear(final ActionEvent ae)
>   {
>     innerShown=true;
>     calls=0;
>   }
>   public void doIt(final ActionEvent ae)
>   {
>     final Map<String, Object> requestMap = FacesContext.getCurrentInstance().getExternalContext()
>         .getRequestMap();
>     requestMap.put("key1", "alert('after actionListener');");
>     requestMap.put("key2", "group2");
>     calls++;
>   }
>   public String getOncomplete()
>   {
>     final Map<String, Object> requestMap = FacesContext.getCurrentInstance().getExternalContext()
>         .getRequestMap();
>     final String value = (String) requestMap.get("key1");
>     if (value != null)
>     {
>       return value;
>     }
>     else
>     {
>       return "alert('before actionListener');";
>     }
>   }
>   public String getRenderIdsRichfaces()
>   {
>     final Map<String, Object> requestMap = FacesContext.getCurrentInstance().getExternalContext()
>         .getRequestMap();
>     final String value = (String) requestMap.get("key2");
>     if (value != null)
>     {
>       return ","+value;
>     }
>     return"";
>   }
>   
>   public String getRenderIdsFAjax()
>   {
>     final Map<String, Object> requestMap = FacesContext.getCurrentInstance().getExternalContext()
>         .getRequestMap();
>     final String value = (String) requestMap.get("key2");
>     if (value != null)
>     {
>       return " " + value;
>     }
>     return"";
>   }
>   
>   public int getCalls()
>   {
>     return calls;
>   }
> }
> {code}
> {code:title="oncomplete.xhtml"}
> <html 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"
>       xmlns:c="http://java.sun.com/jsp/jstl/core">
> <ui:composition>
> <h:head><title>Oncomplete test</title></h:head>
> <h:body>
> <a4j:log mode="popup"/>
> <h:form id="myForm">
> Post button rendered:<h:selectBooleanCheckbox id="innerBool" value="#{OncController.innerShown}"/>
> <br/>
> <h:panelGroup id="outer">
>   <c:if test="#{OncController.innerShown}">
>     <a4j:commandButton value="RichFaces Post"  
>                        actionListener="#{OncController.doIt}"
>                        render="outer,details#{OncController.renderIdsRichfaces}" 
>                        oncomplete="#{OncController.oncomplete}"/>
>     <h:commandButton value="fAJAX Post"  
>                      actionListener="#{OncController.doIt}">
>       <f:ajax render="outer details#{OncController.renderIdsFAjax}"
>               execute="@form"/>
>     </h:commandButton>                     
>   </c:if>
> </h:panelGroup>
> <br/><br/>
> <h:panelGroup id="details">
> oncomplete: <h:outputText value="#{OncController.oncomplete}"/>
> </h:panelGroup>
> <br/><br/>
> <h:panelGroup id="group2">
> calls: <h:outputText value="#{OncController.calls}"/>
> </h:panelGroup>
> <br/><br/>
>   <a4j:commandButton value="Clear"  
>                      actionListener="#{OncController.clear}"
>                      render="myForm" />
> </h:form>
> </h:body>
> </ui:composition>
> </html>
> {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



More information about the richfaces-issues mailing list