[
https://issues.apache.org/jira/browse/MYFACES-4229?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16472319#comment-16472319
]
Werner Punz commented on MYFACES-4229:
--------------------------------------
https://issues.apache.org/jira/browse/MYFACES-4230 took a little bit longer, I
will tackle this issue in the upcoming days in the evening.
> Regression in Spec Issue 790: Cross form submit
> -----------------------------------------------
>
> Key: MYFACES-4229
> URL: https://issues.apache.org/jira/browse/MYFACES-4229
> Project: MyFaces Core
> Issue Type: Bug
> Components: JSR-372
> Affects Versions: 2.3.1
> Reporter: Eduardo Breijo
> Assignee: Werner Punz
> Priority: Major
> Attachments: JSF23Spec790.war
>
>
> After releasing MyFaces 2.3.1, I noticed a regression in cross form submit
> from Spec Issue 790:
> [https://github.com/javaee/javaserverfaces-spec/issues/790]
> HTML sample code:
> {code:java}
> <h:form id="a">
> <h:outputText value="This is 'form a' " />
> <h:outputLabel for="input1" value="Enter a new value for input1: " />
> <h:inputText id="input1" value="#{simpleBean.input}" />
> <h:commandButton id="submitButton1" value="Click here to execute 'form a' and
> 'form b' but re-render 'form b'">
> <f:ajax execute="a :b" render=":b" />
> </h:commandButton>
> </h:form>
> <h:form id="b">
> <h:outputText value="This is 'form b' " />
> <h:outputLabel for="input2" value="Enter a new value for input2: " />
> <h:inputText id="input2" value="#{simpleBean.input}" />
> <h:commandLink id="commandLink1" value="Click here to execute 'form a' and
> 'form b' but re-render 'form a'">
> <f:ajax execute="b :a" render=":a" />
> </h:commandLink>
> </h:form>
> {code}
>
> The issue is that on MyFaces 2.3.1 the hidden input javax.faces.ViewState is
> being removed from form "b" after we submit form "a" and viceversa. As a
> result, cross form submit is not working as expected, you either have to
> refresh the page before executing submit on the second form or you have to
> execute submit twice so the update is reflected in the other form.
> Rendered page on MyFaces 2.3.0
> {code:java}
> <form id="a" name="a" method="post" action="/JSF23Spec790/test1.xhtml"
> enctype="application/x-www-form-urlencoded"> This is 'form a'
> <label for="a:input1"> Enter a new value for input1: </label>
> <input id="a:input1" name="a:input1" type="text" value="test"/>
> <input id="a:submitButton1" name="a:submitButton1" type="submit" value="Click
> here to execute 'form a' and 'form b' but re-render 'form b'"
> onclick="jsf.util.chain(this, event,'jsf.ajax.request(this,event,{execute:\'a
> b \',render:\'b \',\'javax.faces.behavior.event\':\'action\'})'); return
> false;"/>
> <input type="hidden" name="a_SUBMIT" value="1"/>
> <input type="hidden" name="javax.faces.ViewState"
> id="j_id__v_0:javax.faces.ViewState:1"
> value="RjhDMEFGQUMwNDI4NTUwRDAwMDAwMDAx" autocomplete="off"/>
> </form>
> <form id="b" name="b" method="post" action="/JSF23Spec790/test1.xhtml"
> enctype="application/x-www-form-urlencoded"> This is 'form b'
> <label for="b:input2"> Enter a new value for input2: </label>
> <input id="b:input2" name="b:input2" type="text" value="test"/>
> <a href="#" onclick="jsf.util.chain(this,
> event,'jsf.ajax.request(this,event,{execute:\'b a \',render:\'a
> \',\'javax.faces.behavior.event\':\'action\'})'); return false;"
> id="b:commandLink1" name="b:commandLink1"> Click here to execute 'form a' and
> 'form b' but re-render 'form a' </a>
> <input type="hidden" name="b_SUBMIT" value="1"/>
> <input type="hidden" id="javax.faces.ViewState:0"
> name="javax.faces.ViewState" value="RjhDMEFGQUMwNDI4NTUwRDAwMDAwMDAx"/>
> </form>
> {code}
>
> Rendered page on MyFaces 2.3.1
> {code:java}
> <form id="a" name="a" method="post" action="/JSF23Spec790/test1.xhtml"
> enctype="application/x-www-form-urlencoded"> This is 'form a'
> <label for="a:input1"> Enter a new value for input1: </label>
> <input id="a:input1" name="a:input1" type="text" value="test"/>
> <input id="a:submitButton1" name="a:submitButton1" type="submit" value="Click
> here to execute 'form a' and 'form b' but re-render 'form b'"
> onclick="jsf.util.chain(this, event,'jsf.ajax.request(this,event,{execute:\'a
> b \',render:\'b \',\'javax.faces.behavior.event\':\'action\'})'); return
> false;"/>
> <input type="hidden" name="a_SUBMIT" value="1"/>
> <input type="hidden" name="javax.faces.ViewState"
> id="j_id__v_0:javax.faces.ViewState:1"
> value="RjY3MjAyMTY3N0U2ODE3RDAwMDAwMDAx" autocomplete="off"/>
> </form>
> <form id="b" name="b" method="post" action="/JSF23Spec790/test1.xhtml"
> enctype="application/x-www-form-urlencoded"> This is 'form b'
> <label for="b:input2"> Enter a new value for input2: </label>
> <input id="b:input2" name="b:input2" type="text" value="test"/>
> <a href="#" onclick="jsf.util.chain(this,
> event,'jsf.ajax.request(this,event,{execute:\'b a \',render:\'a
> \',\'javax.faces.behavior.event\':\'action\'})'); return false;"
> id="b:commandLink1" name="b:commandLink1"> Click here to execute 'form a' and
> 'form b' but re-render 'form a' </a>
> <input type="hidden" name="b_SUBMIT" value="1"/>
> </form>
> {code}
>
> I have provided a sample app that shows the issue when MyFaces 2.3.1 is used.
> # Just deploy the app on Tomcat and drive a request to:
> [http://localhost:8080/JSF23Spec790/test1.xhtml]
> # Enter a text in input1 and click submit button next to the input. Check
> the rendered page.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)