Struts <logic:iterate> example
Struts comes with <logic:iterate> tag to iterate over collections.
Here’s two <logic:iterate> examples
- Iterate over a list (primitive type)
- Iterate over a list (object)
1. Iterate over a list array (primitive type)
In this example, you initial a normal list with some Strings and store it into HttpServletRequest as name “listMsg“. In JSP page, you can use the <logic:iterate> to iterate the stored list and display the values.
... public class PrintMsgAction extends Action{ public ActionForward execute(ActionMapping mapping,ActionForm form, HttpServletRequest request,HttpServletResponse response) throws Exception { List<String> listMsg = new ArrayList<String>(); listMsg.add("Message A"); listMsg.add("Message B"); listMsg.add("Message C"); listMsg.add("Message D"); request.setAttribute("listMsg", listMsg); return mapping.findForward("success"); } }
Inside the logic tag, you can use the “name” attribute (listMsg) to get the list value.
<%@taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%> <%@taglib uri="http://struts.apache.org/tags-logic" prefix="logic"%> <html> <head> </head> <body> <h1>Struts <logic:iterate> example</h1> <logic:iterate name="listMsg" id="listMsgId"> <p> List Messages <bean:write name="listMsgId"/> </p> </logic:iterate> </body> </html>
2. Iterate over a list array (object)
In this example, you initial a normal list with users object and store it into HttpServletRequest as name “listUsers“. In JSP page, you can use the <logic:iterate> to iterate the stored list and display the values.
public class User{ String username; String url; //getter and setter methods }
... public class PrintMsgAction extends Action{ public ActionForward execute(ActionMapping mapping,ActionForm form, HttpServletRequest request,HttpServletResponse response) throws Exception { List<User> listUsers = new ArrayList<User>(); listUsers.add(new User("user1", "http://www.user1.com")); listUsers.add(new User("user2", "http://www.user2.com")); listUsers.add(new User("user3", "http://www.user3.com")); listUsers.add(new User("user4", "http://www.user4.com")); request.setAttribute("listUsers", listUsers); return mapping.findForward("success"); } }
Inside the logic tag, you can use the “name” attribute (listUsers) to get the list value; while “property” attribute to display the object property value.
<%@taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%> <%@taglib uri="http://struts.apache.org/tags-logic" prefix="logic"%> <html> <head> </head> <body> <h1>Struts <logic:iterate> example</h1> <logic:iterate name="listUsers" id="listUserId"> <p> List Users <bean:write name="listUserId" property="username"/> , <bean:write name="listUserId" property="url"/> </p> </logic:iterate> </body> </html>

Superb
Hi ,
In the given example while Iterating a list, we are not doing any type casting to User.How will this JSP know about user class.
What happend when we write our own general iterate logic to iterate list do we need to type cast .
please clarify my question.
List Users ,
Thanks,
Sha
Hi Sha, He did not provide a complete listing. There are lots of configurations missing from this example, but basically you have a struts-config.xml where you can do something like
<form-beans> <form-bean name=”listUsers” type=”Users” >
Very Helpful example
Thanks for this
try running the example but encountered an error – org.apache.jasper.JasperException: Cannot find bean listMsg in any scope
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:460)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:355)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
already solved it.
Mind to share me your solution?
[...] <logic:iterate> example Struts tag to iterate over collections. [...]
form-beans form-bean name=”listUsers” type=”Users”