[JAVASERVERFACES_SPEC_PUBLIC-1175] Validation error removes all url parameters Created: 18/Mar/13  Updated: 01/Aug/14

Status: Open
Project: javaserverfaces-spec-public
Component/s: Navigation
Affects Version/s: 2.2 Sprint 13
Fix Version/s: None

Type: Bug Priority: Minor
Reporter: a_ilyin Assignee: Unassigned
Resolution: Unresolved Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified


 Description   

This bug was copied from Mojarra issue tracker. See details here:
http://java.net/jira/browse/JAVASERVERFACES-1653

When page has some url parameter(s) after server-side validation error or by
default navigation JSF navigates to the page with the same viewId but without
url parameters.

IMHO the problem is the POST method submits the form to viewId's url only
instead of using url with the parameters as original url has.

This issue makes problems with bookmarking such views with params after handling
some action(minor problem) and generating proper response after action handling
based on this parameters(major problem) .

P.S. Also this issue has another side effect. When handling some action the url
parameters are unavailable.

--------------------
I found some easy workaround for this problem.

I just slightly extend standard ViewHandler to add the queryString to the action
url:

public class UrlWorkaroundMultiViewHandler extends MultiViewHandler {

@Override
public String getActionURL(FacesContext context, String viewId) {

String result = super.getActionURL(context, viewId);
String queryString = ((HttpServletRequest) context.getExternalContext()
.getRequest()).getQueryString();
if (queryString != null)

{ result += "?" + queryString; }

return result;

}
}

and register it in the faces-config.xml

<application>

<view-handler>my.workaround.UrlWorkaroundMultiViewHandler</view-handler>
</application>

I'm not sure this will work for any cases and for all servlet containers. Also
I'm not sure about possible side effects.
I did check it with Jetty.

-----------------------------
UPDATE: I found that we have not add params when we handle new url. So I modify my workaround code to handle more cases:

@Override
public String getActionURL(FacesContext context, String viewId) {

String result = super.getActionURL(context, viewId);

HttpServletRequest request = ((HttpServletRequest) context
.getExternalContext().getRequest());

if (viewId.equals(request.getServletPath())) {
//Do it just if we are on the same page
String qs = request.getQueryString();
if (qs != null)

{ result += "?" + qs; }

}

return result;

}
===============================================
Conclusion: I believe that any valid url should be preserved as is(including query parameters). Even we do not use its url parmas on our page.



 Comments   
Comment by arjan tijms [ 20/Mar/13 ]

This looks like a duplicate of JAVASERVERFACES_SPEC_PUBLIC-1163.

Comment by Ed Burns [ 01/Aug/14 ]

Set priority to baseline ahead of JSF 2.3 triage. Priorities will be assigned accurately after this exercise.

Comment by Manfred Riem [ 01/Aug/14 ]

Setting priority to Minor

Generated at Wed Apr 01 15:07:03 UTC 2015 using JIRA 6.2.3#6260-sha1:63ef1d6dac3f4f4d7db4c1effd405ba38ccdc558.