You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@myfaces.apache.org by "Volodymyr Siedlecki (Jira)" <de...@myfaces.apache.org> on 2023/06/12 19:39:00 UTC

[jira] [Commented] (MYFACES-4606) Missing source button id:value pair from request parameters

    [ https://issues.apache.org/jira/browse/MYFACES-4606?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17731757#comment-17731757 ] 

Volodymyr Siedlecki commented on MYFACES-4606:
----------------------------------------------

[~werpu]  Something you could look at, as you may have originally made these changes years ago? 

I created a draft fix here: [https://github.com/apache/myfaces/pull/577]

However, I also saw that the some similar code here already: [https://github.com/apache/myfaces/blob/2.3.x/api/src/main/javascript/META-INF/resources/myfaces/_impl/xhrCore/_AjaxRequest.js#L289-L307] 

> Missing source button id:value pair from request parameters
> -----------------------------------------------------------
>
>                 Key: MYFACES-4606
>                 URL: https://issues.apache.org/jira/browse/MYFACES-4606
>             Project: MyFaces Core
>          Issue Type: Improvement
>    Affects Versions: 2.0.24, 2.2.15, 2.3.10, 3.0.2, 2.3-next-M8, 4.0.1
>            Reporter: Volodymyr Siedlecki
>            Priority: Major
>
>  
>  
> When the non-ajax submit button is pressed, its id and value is sent as a request parameter. However, if the ajax equivalent button is pressed, the id-value pair is missing.  However, the id is included under the "javax.faces.source" attribute, per the spec. 
> This becomes a problem if you do some binding checks to see if a particular button is pressed. See the link: [https://stackoverflow.com/a/14730658/11402059] 
> Here's a sample of the behaviors for ajax and non ajax submissions.  The required parts are in red (which should appear in both requests): 
> {code:java}
> <h:form id="form1">
> <div> Ajax Checkboxes: </div>
> <h:selectManyCheckbox id="ajaxCheckbox" required="#{not empty ajaxbtn.clientId}"> 
>    <f:selectItem itemValue = "1" itemLabel = "Item 1" /> 
>    <f:selectItem itemValue = "2" itemLabel = "Item 2" /> 
> </h:selectManyCheckbox>
> Message for ajaxCheckbox -> <h:message for="ajaxCheckbox" />
> <br/>
> <div> Non-Ajax Checkboxes: </div>
> <h:selectManyCheckbox id="nonajaxCheckbox" required="#{not empty nonajaxbtn.clientId}"> 
>    <f:selectItem itemValue = "3" itemLabel = "Item 3" /> 
>    <f:selectItem itemValue = "4" itemLabel = "Item 4" /> 
> </h:selectManyCheckbox>
> Message for nonajaxCheckbox -> : <h:message for="nonajaxCheckbox" />
> <br/>
> <!-- Added this button to see parameters passed when using ajax -->
> <h:commandButton id="ajaxbtn" value="Ajax Submit" binding="#{ajaxbtn}">
>      <f:ajax event="click" execute="@form" render="@form"/>
> </h:commandButton>
> <h:commandButton id="nonajaxbtn" value="Non Ajax Submit" binding="#{nonajaxbtn}"/>
> <c:forEach items="#{param}" var="entry">
>      <p style="#{entry.key == 'form1:nonajaxbtn' or entry.key == 'form1:ajaxbtn'  ? 'color:red;' : 'color:black;'}"><h:outputText value="#{entry.key}" /> : <h:outputText value="#{entry.value}" /></p>
> </c:forEach>
> </h:form>
> {code}
>  
> It used to work in 2.0, but now fails after refactoring. 
> 2.3.x: 
> https://github.com/apache/myfaces/blob/2.3.x/api/src/main/javascript/META-INF/resources/myfaces/_impl/xhrCore/_AjaxUtils.js#L38-L63 
>  
> 2.0.5: 
> https://github.com/apache/myfaces/blob/myfaces-core-project-2.0.5/api/src/main/javascript/META-INF/resources/myfaces/_impl/xhrCore/_AjaxUtils.js#L57 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)