Okay, I understand this issue. I don't think it is possible to
abstract away a complex search screen with http GET method for
bookmarks. The performFind service is quite complex and it is
difficult to replicate the requirements using GET. GET is not designed
to handle multiple languages, spaces, and other peculiarities that are
needed for such a screen to work.

There are multiple solutions that I can see here. One of them is
simply to create a new entity, let's call it SearchFilter, that saves
search parameters, which can be applied later on. Either way, you need
to customize, your problem is not OFBiz, your problem is http GET
limitations.
On Fri, Aug 24, 2018 at 12:35 PM Ritesh Kumar
<ritesh.ku...@hotwaxsystems.com> wrote:
>
> Using the POST method does not append form data to the URL, i.e, the
> parameters will not be visible in the URL.
> For example, take a Find Screen (say, FindWorkEffort) which send data
> through a form with POST method. Apply some filters (say, status). No
> applied filters appear in the URL.  Bookmark this page. Next time when I
> open this bookmark, those applied filters will not be there as this page is
> being rendered using data from the URL and since the applied filters were
> not there in the bookmarked URL, this page is rendered without the applied
> filters. That is why I used GET form method so that I am able to get the
> page with applied filters when I open a bookmarked page.
>
> The bug here is (supposing the GET method is used)
> 1. On opening the bookmark, the page is rendered with double encoding (if
> the value had a space character initially, the space character was already
> encoded into '+' in the URL and when this bookmark is opened, this '+' is
> again encoded).
> 2. Suppose the bookmarked URL had multiple values from the same filter
> (say, Cancelled and Declined status), it renders with just one of the
> statutes applied. It is because the request handler prepares a Map of
> parameters from the query string and as is the property of Map to replace
> the old value if a new value is being added with the same key (in this
> example, first Cancelled status is put in this Map and then Declined), only
> Declined status is put in this Map.
>
> Hope, this clears the confusion. I will be happy to provide more
> information if needed.
>
> On Fri, Aug 24, 2018 at 1:46 PM Taher Alkhateeb <slidingfilame...@gmail.com>
> wrote:
>
> > Not enough information. What happens exactly? What is the bug? What do you
> > mean by it does not let us do that?
> >
> > On Fri, Aug 24, 2018, 11:09 AM Ritesh Kumar <
> > ritesh.ku...@hotwaxsystems.com>
> > wrote:
> >
> > > Hello Taher,
> > >
> > > Changing form method to GET is just to make the query parameters visible
> > in
> > > the URL so that a user is able to bookmark or share it. Using the POST
> > > method does not let us do that.
> > >
> > > On Fri, Aug 24, 2018 at 11:54 AM Taher Alkhateeb <
> > > slidingfilame...@gmail.com>
> > > wrote:
> > >
> > > > Why did you change the method to GET?
> > > >
> > > > On Fri, Aug 24, 2018, 9:20 AM Ritesh Kumar <
> > > ritesh.ku...@hotwaxsystems.com
> > > > >
> > > > wrote:
> > > >
> > > > > Just to put my point more clearly, let me add the steps to generate
> > the
> > > > > above-mentioned case. Please refer demo-trunk
> > > > > <https://demo-trunk.ofbiz.apache.org/webtools/control/main>.
> > > > >
> > > > > 1. Open this link, FindWorkEffort
> > > > > <
> > https://demo-trunk.ofbiz.apache.org/workeffort/control/FindWorkEffort
> > > >.
> > > > > Find Work Effort screen will be rendered.
> > > > > 2. Inspect and change the form method to "GET".
> > > > > 3. Apply any of the two statuses (say, Cancelled and Declined). Click
> > > on
> > > > > Find.
> > > > > 4. Records will be fetched according to the applied filters.
> > > > > 5. Check the URL. Cancelled and Declined statuses must be there in
> > the
> > > > URL.
> > > > > 6. Bookmark this page and log out.
> > > > > 7. Now, open the bookmark.
> > > > > 8. The login page will be rendered. Check the URL here. It will be
> > the
> > > > same
> > > > > as it was when the page was being bookmarked.
> > > > > 9. Type in the credentials and log in.
> > > > > 10. The result may be different. Check the URL. One of the statuses
> > is
> > > > > gone.
> > > > >
> > > > > Due to business requirement, I need to show query parameters in the
> > URL
> > > > so
> > > > > that the user is able to bookmark the page. And, we normally pass Id
> > in
> > > > the
> > > > > parameters, but, due to some reason, I may have to pass values with
> > > space
> > > > > characters.
> > > > >
> > > > > I hope, this demo puts forth my concern.
> > > > >
> > > > >
> > > > >
> > > > > On Thu, Aug 23, 2018 at 6:27 PM Ritesh Kumar <
> > > > > ritesh.ku...@hotwaxsystems.com>
> > > > > wrote:
> > > > >
> > > > > > Hello All,
> > > > > >
> > > > > > I faced an issue while trying to open a bookmarked page with OFBiz.
> > > > > >
> > > > > > Suppose, the URL of this bookmarked page contains a parameter with
> > > > > > multiple values and the value may have space character. The query
> > > > string
> > > > > in
> > > > > > the URL looks somewhat like this
> > > > > >
> > > > > >
> > > > >
> > > >
> > >
> > "?categoryHierarchy=3%2FCompany+Catalog%2FBrowse+Root%2FCloths%2FMen%2F"&statusId=approved&statusId=created".
> > > > > > The "%2F" and "+" are encoded value of  "/", a separator and space
> > > > > > character respectively. The status id parameter appears twice and
> > the
> > > > > > category hierarchy value has space character.
> > > > > >
> > > > > > The user is logged out at this instance and this bookmarked page is
> > > > > > opened. Since the user is not logged in, the login page is
> > rendered.
> > > I
> > > > > feed
> > > > > > in the credentials and the intended URL is hit. Here, I do not get
> > > the
> > > > > > required result.
> > > > > >
> > > > > > When I check the URL, the parameter with multiple values just has
> > the
> > > > > last
> > > > > > value of the list and "+" is encoded into "%2B". The URL now is
> > > > > >
> > > > > >
> > > > >
> > > >
> > >
> > "?categoryHierarchy=3%2FCompany%2BCatalog%2FBrowse%2BRoot%2FCloths%2FMen%2F"&statusId==created."
> > > > > >
> > > > > > I did some digging and found out that LoginWorker.checkLogin()
> > comes
> > > > into
> > > > > > action and what it does is that it creates a new session object
> > > > (because
> > > > > > the previous session becomes invalid) and in the session object, it
> > > > puts
> > > > > > the previous URL parameters. This previous URL parameters are
> > fetched
> > > > > using
> > > > > > UtilHttp.getUrlOnlyParameterMap(request) which internally calls
> > > > > > getQueryStringOnlyParameterMap(). This method returns a map by
> > > breaking
> > > > > the
> > > > > > query string into key and value pair. A map can not have duplicate
> > > keys
> > > > > (in
> > > > > > this case removes the approved status) and the value is not decoded
> > > > > before
> > > > > > putting it into the map ('+' is not decoded). This map is then used
> > > to
> > > > > > create an encoded ('+' is encoded into '%2B' ) redirect target and
> > > then
> > > > > > callRedirect() is called on this new redirect target, ending up
> > with
> > > > > > unintended URL (inside RequestHandler.doRequest()).
> > > > > >
> > > > > > I could resolve this issue by decoding the already encoded value
> > > before
> > > > > > putting it into the Map and if the key is already present in the
> > Map,
> > > > it
> > > > > > must create a list of the values.
> > > > > >
> > > > > > Am I missing something or is this really a bug and needs to be
> > > > addressed
> > > > > > OOTB?
> > > > > > If this is a bug, is proposed solution the right one?
> > > > > >
> > > > > > --
> > > > > > Best,
> > > > > > Ritesh Kumar
> > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >

Reply via email to