[ https://issues.apache.org/jira/browse/MYFACES-4695?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17900038#comment-17900038 ]
Thomas Andraschko commented on MYFACES-4695: -------------------------------------------- as i said in the PR, thats by design it needs to be <f:ajax render=":cartForm:one" /> as findComponent and expressions are relative to the parent NamingContainer > Ajax's render doesn't support nested elements > ---------------------------------------------- > > Key: MYFACES-4695 > URL: https://issues.apache.org/jira/browse/MYFACES-4695 > Project: MyFaces Core > Issue Type: Bug > Affects Versions: 2.3.10, 3.0.2, 2.3-next-M8, 4.0.2, 4.1.0-RC3 > Reporter: Volodymyr Siedlecki > Priority: Major > > The code below doesn't work as expected. The element with id "one" should be > updated. Instead, the submit is rendered when pressed. > {code:java} > <h:body> > TEMPLATE > <h:form id="cartForm"> > CART IS HERE! > <h:outputText id="one" value="1" /> > <h:outputText id="two" value="2" /> > </h:form> > <h:form id="shoppingCartForm" name="shoppingCartForm"> > <h:commandButton type="submit" value="Update" > styleClass="commandExButton" id="updateButton"> > <f:ajax execute="@form" render="cartForm:one" /> > </h:commandButton> > </h:form> > </h:body> > </f:view> > {code} > The generated code looks like: > {code:java} > <input id="shoppingCartForm:updateButton" > name="shoppingCartForm:updateButton" type="submit" value="Update" > onclick="faces.util.chain(this, > event,function(event){myfaces.ab(this,event,'action','@form','shoppingCartForm:updateButton')}); > return false;" class="commandExButton"> {code} > The ids for the render are the submit button itself: > *shoppingCartForm:updateButton* > Note: Mojarra works as expected (element one is updated) when I tested the > same facelet. > Note: 4.1.0-RC3 fails with the following exception (due to > [MYFACES-4624|https://github.com/apache/myfaces/commit/304099d4588383424df9105d5a751911c1c5301a]): > > {code:java} > jakarta.servlet.ServletException: Cannot find component for expression > "cartForm:one" referenced from "shoppingCartForm:updateButton". > at jakarta.faces.webapp.FacesServlet.service(FacesServlet.java:239) > at > com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1266) > at [internal classes] > Caused by: > jakarta.faces.component.search.ComponentNotFoundException: Cannot find > component for expression "cartForm:one" referenced from > "shoppingCartForm:updateButton". > at > org.apache.myfaces.component.search.SearchExpressionHandlerImpl.resolveClientIds(SearchExpressionHandlerImpl.java:179) > at [internal classes] > at > org.apache.myfaces.renderkit.html.util.AjaxScriptBuilder.appendIds(AjaxScriptBuilder.java:278) > at > org.apache.myfaces.renderkit.html.util.AjaxScriptBuilder.build(AjaxScriptBuilder.java:205) > {code} > _____ > The solution in my opinion is the let the search in the invokeOnComponent > method call continue without regard of the separator character. The parent > naming contains would be searched until the id is found (or not). > In other words, remove this line: > [https://github.com/apache/myfaces/blame/4.1.x/impl/src/main/java/org/apache/myfaces/component/search/SearchExpressionHandlerImpl.java#L538] > -- This message was sent by Atlassian Jira (v8.20.10#820010)