Since Struts is a framework, there a number of inter-related parts that
work together, the error handling is a good example of that.
When you detect an error in your Action, you need a way to display it to
the user. Since most Actions are not designed to be "views", this is a
problem.
Struts solves this problem using four (count'em 4) components, the
ActionErrors class, the message resource, the SaveError method, and,
finally, the html:errors tag.
The ActionErrors class is a way to "log" an error. Rather have you embed
a string, the ActionErrors class lets you insert a message resource key.
This is the same resource that bean:message tag uses to provide
internationalization. The SaveError method puts your ActionError class
under a reserved key in the request context, where the html:error tag
can find it.
In your Action, you would usually have code snippets that look like
this:
// grab a reference to the application resource collection
MessageResources messages = getResources();
// create a error message buffer
ActionErrors errors = new ActionErrors();
// process action
// detect error
if (detect_error) {
errors.add(ActionErrors.GLOBAL_ERROR,new
ActionError("error.detected"));
}
// On error, return to input form
if (!errors.empty()) {
saveErrors(request, errors); // put the error(s) where the
htlm:error tag can find them
return (new ActionForward(mapping.getInput())); // go home
}
If the error concerns a particular field on a form, you might also have
if (field_error) {
errors.add("field name",new ActionError("error.fieldname"));
}
An important thing to realize is that "error.fieldname" is not what the
tag will display. The html:error tag assumes that the strings are the
name of a key in your application's message resource, which might look
like this
; application.properties
errors.header = <ul>
error.fieldname = <li>Password required</li>
error.detected = <li>Database not available</li>
error.username = <li>That username was not found</li>
errors.footer =</ul>
For more complex needs, ActionErrors can also use "replacement values"
to build customized messages, or to build messages from stock phrases.
For more on these classes, see
< http://jakarta.apache.org/struts/api >
"Suriyanarayanan, Senthil Kumar" wrote:
>
> How do you make the errors shows up on the generated page.? Here is the code
> snapshot..
>
> LogonForm.java
> public ActionErrors validate(ActionMapping mapping, HttpServletRequest
> request)
> {
> if(password == null || !password.equals("password"))
> {
> ActionErrors aes = new ActionErrors();
> ActionError ae = new ActionError("Please type the
> valid password");
> aes.add("?", ae);
> return aes;
> }
> return null;
> }
> What should I put at the place of '?' in the above add method
>
> struts-config.xml
>
> <form-beans>
> <form-bean name="logonForm" type="package.LogonForm"/>
> </form-beans>
>
> <action-mappings>
> <!-- Logon Action -->
> <action path="/logon"
> type="package.LogonAction"
> scope="request"
> name="logonForm"
> validate="true"
> input="/logon.jsp">
> <forward name="successpage" path="/success.jsp" />
> </action>
> </action-mappings>
>
> logon.jsp
>
> <html:errors/>
> <html:form action="logon.do">
> UserId: <html:text property="userId" size="15" maxlength="15"
> redisplay="false" />
> Password: <html:password property="password" size="16"
> maxlength="16" redisplay="false" />
> <html:submit/>
> </html:form>
>
> I saw one of the postings talking about saveErrors method. It belongs to
> Action Object, and I how do
> I get reference to action object from the validate method?
>
> Thanks in advance,
> Senthil Kumar.S