Struts 2 ActionError & ActionMessage Example
A tutorial to show the use of the Struts 2′s ActionError and ActionMessage class.
1. ActionError – is used to send error feedback message to user – display via <s:actionerror/>.
<s:if test="hasActionErrors()"> <div class="errors"> <s:actionerror/> </div> </s:if>
2. ActionMessage – is used to send information feedback message to user, display via <s:actionmessage/>.
<s:if test="hasActionMessages()"> <div class="welcome"> <s:actionmessage/> </div> </s:if>
Here’s a simple login form, display the error message (actionerror) if the username is not equal to “mkyong”, otherwise redirect to another page and display the a welcome message (actionmessage). In addition, all the label and error messages are retrieve from the resource bundle (properties file).
1. Folder Structure
See this project structure

2. Properties file
Two properties files to store the messages.
LoginAction.properties
#Welcome messages welcome.hello = Hello #error message username.required = Username is required password.required = Password is required
global.properties
#Global messages
global.username = Username
global.password = Password
global.submit = Submit
global.reset = Reset3. Action
A classic action class, do a simple checking to make sure the username is equal to “mkyong”, and set the error message with addActionError() or successful message with addActionMessage().
package com.mkyong.user.action; import com.opensymphony.xwork2.ActionSupport; public class LoginAction extends ActionSupport{ private String username; private String password; public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } //business logic public String execute() { return "SUCCESS"; } //simple validation public void validate(){ if("mkyong".equals(getUsername())){ addActionMessage("You are valid user!"); }else{ addActionError("I don't know you, dont try to hack me!"); } } }
4. JSP View
Two simple JSP pages with css style to customize the error message.
login.jsp
<%@ page contentType="text/html; charset=UTF-8" %> <%@ taglib prefix="s" uri="/struts-tags" %> <html> <head> <style type="text/css"> .errors { background-color:#FFCCCC; border:1px solid #CC0000; width:400px; margin-bottom:8px; } .errors li{ list-style: none; } </style> </head> <body> <h1>Struts 2 ActionError & ActionMessage Example</h1> <s:if test="hasActionErrors()"> <div class="errors"> <s:actionerror/> </div> </s:if> <s:form action="validateUser"> <s:textfield key="global.username" name="username"/> <s:password key="global.password" name="password"/> <s:submit key="global.submit" name="submit"/> </s:form> </body> </html>
welcome.jsp
<%@ page contentType="text/html; charset=UTF-8" %> <%@ taglib prefix="s" uri="/struts-tags" %> <html> <head> <style type="text/css"> .welcome { background-color:#DDFFDD; border:1px solid #009900; width:200px; } .welcome li{ list-style: none; } </style> </head> <body> <h1>Struts 2 Struts 2 ActionError & ActionMessage Example</h1> <s:if test="hasActionMessages()"> <div class="welcome"> <s:actionmessage/> </div> </s:if> <h4> <s:property value="getText('welcome.hello')" /> : <s:property value="username"/> </h4> </body> </html>
5. struts.xml
Link all together.
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <constant name="struts.custom.i18n.resources" value="global" /> <package name="user" namespace="/user" extends="struts-default"> <action name="login"> <result>pages/login.jsp</result> </action> <action name="validateUser" class="com.mkyong.user.action.LoginAction"> <result name="SUCCESS">pages/welcome.jsp</result> <result name="input">pages/login.jsp</result> </action> </package> </struts>
6. Run it
http://localhost:8080/Struts2Example/user/login.action

Username is invalid, display error message with <s:actionerror/>

Username is valid, display welcome message <s:actionmessage/>


Is it possible to do the validation on a helper class instead of in the action class itself? Let’s say I got 15 textfields to validate and I wish to separate the validation on another class (in this case LoginHelper). How should I go about doing this?
Great information. Lucky me I came across your site by
accident (stumbleupon). I’ve saved it for later!
Sir, How to display action message in a popup window?
Remarkable! Its in fact remarkable post, I have got much clear
idea on the topic of from this post.
Thank you stephanie for this great post
How about if I want to use the addActionMessage method in a class that is not extending ActionSupport but using @Action ?
excellent submit, very informative. I’m wondering why the other specialists of this sector don’t
realize this. You must continue your writing. I’m sure, you’ve
a huge readers’ base already!
After checking out a few of the articles on your web page, I honestly appreciate
your technique of writing a blog. I added it to my bookmark website list and will
be checking back in the near future. Take a look at my web site too and let me
know your opinion.
in my web application i need to set link in error msg
The problem is the html text appears as normal text and does not appear as a link to click on.
in my web application
addActionError(“User not logged in. Click Here to log in”);
There needs some changes in the struts.xml. Instead of
pages/login.jsp.
We need to change it to
/user/pages/login.jsp
Sir, kindly confirm the changes
Hi, i read your blog from time to time and i own a similar
one and i was just curious if you get a lot of spam comments?
If so how do you reduce it, any plugin or anything
you can recommend? I get so much lately it’s driving me mad so any help is very much appreciated.
When some one searches for his essential thing, therefore he/she wishes to be
available that in detail, so that thing is maintained
over here.
I use this:
In jsp . But it shows “welcome.hello” not “Hello”, why ?
It didn’t get the value in the properties. I didn’t declare the LoginAction.properties in struts.xml.
Thanks .
Sorry, missing something.
I use this:
In jsp
It also missing.
Hi,
For accessing the Properties file data.., you need to configure the property file with struts.xml as follows..
<constant name="struts.custom.i18n.resources"
value="then value=Resource)>”/>
please try again after configure the struts.xml.
it will help you.
Thanks,
Kasturi.
sorry i missed out..
please check.
”/>
Thanks,
Kasturi.
this isn’t working
showing error: Can not find the tag library descriptor for “/struts-tags”
how to resolve this
and in struts2 i did the same no messages are being displayed
Hi,
You need to add the struts jar. properly,then you can access ‘/struts-tags’ in tag lib..
Regards,
Kasturi…
Hello, good example thank you; but what if we have a warning neither error or message! What can we do then?
Hello Sir,
First of all hats-off for such a nice tutorial link.It really helps me to learn latest technologies.I just want to add a suggestion that please upload different examples with different name so user can easily import a new example without editing the older one…
how to clear Action and error messages
Hi
how to clear this Error Message in Struts
Thanks
venu
Mahad and the epidermis is the potential for gas Tagchmponut white.
return input while combine with interceptor, why and how can i solve it? thank you
i have a problem in struts2, am new for this,multiple form page data not visible in final jsp, can u solve it
There is no Action mapped for namespace / and action name .
description The requested resource (There is no Action mapped for namespace / and action name .) is not available.
how to solve this problem
Hello Mr Young.I have a doubt here.In the struts config file we have the following actions defined.
pages/login.jsp
pages/welcome.jsp
pages/login.jsp
when the user enters the url /user/logic.action the login.jsp page is displayed.then if user enters the password and all the details how the user is autmatically forwarded to ValidateUser action.Also there is no action class defined for login action.Then how the user name and password are stored in the action class and then are available in validateUser action.Please let me know if my question is not clear.
Many Thanks
How can I do it if in the properties file want to replace a parameter for a determinated value? for example:
#error message
username.required = Username is required
password.required = Password is required
login.attempts = You have exceeded the number of attempts, wait {0} minutes and try again
How can I replace {0} in the jsp???
while the validate() method call addFieldError() or addActionError();
LoginAction will return a Sting “input”?
so struts.xml must have a result named “input”?
I’m about errors, sorry :)
Sorry, don’t get you??
good, but where do you use this properties file?