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

Werner Punz commented on MYFACES-4606:
--------------------------------------

Ok I checked the old code, the old code does not have this problem because only 
buttons and submits are appended (we might add hrefs in the long run if 
requested)

So I can roll a new jsf_ts release tomorrow and pull the changes in.

The fix is more or less that I basically do not append a checkbox or radio 
button as issuing element if it is unchecked (hence the value is not appended 
then)

Since the mechanism is needed mostly for buttons anyway (and hrefs), it should 
be ok to have this behavior!

 

> 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)

Reply via email to