myfaces-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Werner Punz (JIRA)" <...@myfaces.apache.org>
Subject [jira] [Commented] (MYFACES-4229) Regression in Spec Issue 790: Cross form submit
Date Mon, 11 Jun 2018 15:10:00 GMT

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

Werner Punz commented on MYFACES-4229:
--------------------------------------

Ok I found a bug in Myfaces 2.3.1 on this issue as well. As it seems  the view root is not
rendered, but the ajax switches to namespaced mode.

The rendered form in the example above is:

 
{code:java}
<form id="a" name="a"{code}
however I get following ajax response:
{code:java}
<partial-response id="j_id__v_0">
<changes>
<update id="b">
<form id="b" name="b" method="post" action="/IntegrationJSTest/regression/4229.jsf" 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="hello worldaaa" /><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>
</update
>
<update id="j_id__v_0:javax.faces.ViewState:1">
OTk1REE5NjlFM0Q2MEY5QTAwMDAwMDBC
</update>
</changes>
</partial-response>
{code}
 So what happens, the 
{code:java}
<update id="j_id__v_0:javax.faces.ViewState:1">{code}
Issues a viewroot and according to the spec I am from now on I am only allowed to update the
forms which prefix with the viewroot  
{code:java}
j_id__v_0{code}
In their identifier. However the forms do not have the viewroot. The update fails.

I need a fix for this one as well on the myfaces base here. Either turn off namespace mode
because we have only one viewroot anyway, or turn it on and prefix the ids.

 

> 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
>             Fix For: 2.3.2
>
>         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)

Mime
View raw message