You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@myfaces.apache.org by Rick Gruber-Riemer <ri...@vanosten.net> on 2005/10/25 13:01:05 UTC
Design question: how best to pass query from search-form to result-page
Hi
I would like to know what the best practice is to pass a query from a
"search-"form to a results page. With this a mean page A with some form
elements to search for records in a database and page B showning a table
of results with all matches.
I can come up with the following 5 alternatives:
* [A]: A.jsp and B.jsp refer to the same Backing Bean, which has
session scope. So when B.jsp is called and the table rendered, the
Backing Bean has directly access to the search form fields and can
use these to submit a query in a DAO.
* [B]: A.jsp and B.jsp have Backing Beans A.java and B.java in
request scope. A.java puts the form elements within its action
method into a Map, which is stored in either the request or the
session. B.java reads the Map from either session or request and
uses them to submit a query in a DAO.
* [C]: pages and beans like [B]. But A.java's action method actually
makes query in DAO and then puts the result in session or request.
* [D]: This time in A.java's action method FacesContext is used to
get an instance of B.java and set the form parameters with
getters/setters, such that in the render phase of b.jsp a query
can be made against a DAO.
* [E]: In A.java's action method submit the form parameters to a DAO
method, which returns a query string. This is then set into a
session parameter. In B.java get the query string from the session
parameter and use it then to submit a query in the DAO. The beauty
of this would be that the concrete DAO implementation would
generate the relevant query, such that it would be transparent for
the Backing Bean and a Business Delegat whether we use a Hibernate
implementation or plain SQL or JDO ... And the query string does
not use a lot of memory in the session :-). Plus a "select
count(*)" in the DAO already when getting the query string in
A.java could reveal, whether the user has to be more precice as
the query would return to many records (configurable).
Pros/cons:
* [A]: Positive: easy to implement. Negative: session scope and
results potentially hanging around in session (e.g. for simple pager).
* [B]: Positive: request scope. Negative: as with [A] the Map gets
some logic with field names that need to be maintained.
* [C]: Positive: easy to implement. Negative: As with [A] there can
be problems if using request parameters in portlets (as far as I
know). Results can be big and somehow should be nullified in
session as soon as pointer is set in B.java.
* [D]: Negative: not really an improvement over [A]; I do not like
to play with BackingBeans in FacesContext (-> session vs. request
scope?)
* [E]: Positive: I just like it ;-)
Any comments?
Re: Design question: how best to pass query from search-form to result-page
Posted by Werner Punz <we...@gmx.at>.
you also could use t:saveState on your backing bean instead of putting
it into the session ;-)
Rick Gruber-Riemer wrote:
> Hi
>
> I would like to know what the best practice is to pass a query from a
> "search-"form to a results page. With this a mean page A with some form
> elements to search for records in a database and page B showning a table
> of results with all matches.
>
> I can come up with the following 5 alternatives:
>
> * [A]: A.jsp and B.jsp refer to the same Backing Bean, which has
> session scope. So when B.jsp is called and the table rendered, the
> Backing Bean has directly access to the search form fields and can
> use these to submit a query in a DAO.
> * [B]: A.jsp and B.jsp have Backing Beans A.java and B.java in
> request scope. A.java puts the form elements within its action
> method into a Map, which is stored in either the request or the
> session. B.java reads the Map from either session or request and
> uses them to submit a query in a DAO.
> * [C]: pages and beans like [B]. But A.java's action method actually
> makes query in DAO and then puts the result in session or request.
> * [D]: This time in A.java's action method FacesContext is used to
> get an instance of B.java and set the form parameters with
> getters/setters, such that in the render phase of b.jsp a query
> can be made against a DAO.
> * [E]: In A.java's action method submit the form parameters to a DAO
> method, which returns a query string. This is then set into a
> session parameter. In B.java get the query string from the session
> parameter and use it then to submit a query in the DAO. The beauty
> of this would be that the concrete DAO implementation would
> generate the relevant query, such that it would be transparent for
> the Backing Bean and a Business Delegat whether we use a Hibernate
> implementation or plain SQL or JDO ... And the query string does
> not use a lot of memory in the session :-). Plus a "select
> count(*)" in the DAO already when getting the query string in
> A.java could reveal, whether the user has to be more precice as
> the query would return to many records (configurable).
>
> Pros/cons:
>
> * [A]: Positive: easy to implement. Negative: session scope and
> results potentially hanging around in session (e.g. for simple pager).
> * [B]: Positive: request scope. Negative: as with [A] the Map gets
> some logic with field names that need to be maintained.
> * [C]: Positive: easy to implement. Negative: As with [A] there can
> be problems if using request parameters in portlets (as far as I
> know). Results can be big and somehow should be nullified in
> session as soon as pointer is set in B.java.
> * [D]: Negative: not really an improvement over [A]; I do not like
> to play with BackingBeans in FacesContext (-> session vs. request
> scope?)
> * [E]: Positive: I just like it ;-)
>
> Any comments?