[
https://issues.apache.org/jira/browse/MYFACES-4695?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Volodymyr Siedlecki resolved MYFACES-4695.
------------------------------------------
Resolution: Fixed
Fixed in 2.3 and higher
> 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
> Fix For: 2.3.11, 3.0.3, 2.3-next-M9, 5.0.0, 4.0.3, 4.1.0-RC4
>
>
> 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)