[
https://issues.apache.org/jira/browse/MYFACES-4606?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17771242#comment-17771242
]
Volodymyr Siedlecki commented on MYFACES-4606:
----------------------------------------------
Hi, [~werpu]. We discovered a TCK failures after pulling this fix in 4.0.
[https://github.com/jakartaee/faces/blob/master/tck/faces22/ajax/src/test/java/ee/jakarta/tck/faces/test/servlet30/ajax_selenium/Issue2255IT.java#L48C44-L48C44]
My investigation showed that
`[divInComposite.xhtml`|https://github.com/jakartaee/faces/blob/4c5e8faab21db7edb9e32423bba056c06a0e3082/tck/faces22/ajax/src/main/webapp/divInComposite.xhtml#L26]
contains a boolean checkbox and we should not submit a value here.
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/checkbox
Note: If a checkbox is unchecked when its form is submitted, neither the name
nor the value is submitted to the server. There is no HTML-only method of
representing a checkbox's unchecked state (e.g. value=unchecked). If you wanted
to submit a default value for the checkbox when it is unchecked, you could
include JavaScript to create a <input type="hidden"> within the form with a
value indicating an unchecked state.
I'm wondering if checkbox is only exception? We may need a few checks here
before appending the issuing element.
Would you mind looking at this? Thank you.
> Missing source button id:value pair from request parameters in ajax requests
> ----------------------------------------------------------------------------
>
> 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
> Assignee: Werner Punz
> Priority: Major
> Fix For: 2.3.11, 3.0.3, 2.2.16, 4.0.2
>
>
> When the non-ajax submit button is pressed, its id and value is sent as a
> request parameter. 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 param checks (via binding attr.) to see
> if a particular button is pressed. See more info about this here:
> [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
> param[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
> param[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. Haven't tested on
> 4.0, but I think it's also affected.
> 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)