I have a Java bean like this:
class Person {
int age;
String name;
}
I'd like to iterate over a collection of these beans in a JSP, showing each person in a HTML table row, and in the last row of the table I'd like to show the total of all the ages.
The code to generate the table rows will look something like this:
<c:forEach var="person" items="${personList}">
<tr><td>${person.name}<td><td>${person.age}</td></tr>
</c:forEach>
However, I'm struggling to find a way to calculate the age total that will be shown in the final row without resorting to scriptlet code, any suggestions?
Best Solution
Note: I tried combining answers to make a comprehensive list. I mentioned names where appropriate to give credit where it is due.
There are many ways to solve this problem, with pros/cons associated with each:
Pure JSP Solution
As ScArcher2 mentioned above, a very easy and simple solution to the problem is to implement it directly in the JSP as so:
The problem with this solution is that the JSP becomes confusing to the point where you might as well have introduced scriplets. If you anticipate that everyone looking at the page will be able to follow the rudimentary logic present it is a fine choice.
Pure EL solution
If you're already on EL 3.0 (Java EE 7 / Servlet 3.1), use new support for streams and lambdas:
JSP EL Functions
Another way to output the total without introducing scriplet code into your JSP is to use an EL function. EL functions allow you to call a public static method in a public class. For example, if you would like to iterate over your collection and sum the values you could define a public static method called sum(List people) in a public class, perhaps called PersonUtils. In your tld file you would place the following declaration:
Within your JSP you would write:
JSP EL Functions have a few benefits. They allow you to use existing Java methods without the need to code to a specific UI (Custom Tag Libraries). They are also compact and will not confuse a non-programming oriented person.
Custom Tag
Yet another option is to roll your own custom tag. This option will involve the most setup but will give you what I think you are esentially looking for, absolutly no scriptlets. A nice tutorial for using simple custom tags can be found at http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/JSPTags5.html#74701
The steps involved include subclassing TagSupport:
Define the tag in a tld file:
Declare the taglib on the top of your JSP:
and use the tag:
Display Tag
As zmf mentioned earlier, you could also use the display tag, although you will need to include the appropriate libraries:
http://displaytag.sourceforge.net/11/tut_basic.html