Re: Simple Form submission
sasuke wrote:
Hello to all Java programmers out there.
I am currently trying to create a very simple form which would store
the data entered by the user in a database, but I would like to be
sure that I make use of the best practices in J2EE and that too
*without* using any framework out there; just plain old JSP/Servlets.
My action plan is something like:
"Create a simple HTML login form. Create a form bean. When the form is
submitted, redirect to a controller servlet which pulls the form
values and creates a form bean out of this. Set this bean in the
session scope. Call the validate function on this bean.
If validation succeeds, pass the bean instance to a DAO class (Data
Access Object) which can persist in into the database/any other
persistent storage and destroy the bean from the session scope. If
validation fails, pass a error bean / a list of error messages back to
the same page. Use the bean stored in the session to restore the
values which were correctly filled and display the contents of error
bean / list. Use JSTL for conditional branching and looping".
Is there a better way of doing this or are there any flaws with my
approach? Any comments would be really appreciated.
I wouldn't use "redirect" but have the form target be the servlet directly.
Otherwise it's exactly the pattern I've used in many Web apps.
I write a single controller servlet that is the target of all forms. The
servlet has a Map of Handler implementor classes that trigger off the form
name. Based on the form name, the controller retrieves the Handler class,
instantiates it and passes the request's parameters to the Handler instance
and invokes the Handler's run() method or equivalent, retrieving a result
code. Then it puts the Handler instance into the request as an attribute.
Then it does a RequestDispatcher.forward() to a JSP. It looks up the JSP by
correlating the form name and Handler result to a new view.
The JSP uses jsp:useBean to retrieve the Handler instance and invoke a
getResult() on it, or even better, accesses it with Expression Language (EL),
not scriptlet.
<c:forEach var="widget" items="${handler.rows}">
Wash. Rinse. Repeat.
--
Lew