1

I am writing a JSP page that retrieves variables from a servlet and outputs them to the user, my current code works as follows :

String uploadStatus = (String) request.getAttribute("uploadStatus");
String readStatus = (String) request.getAttribute("readStatus");
String saveStatus = (String) request.getAttribute("saveStatus");
String completeStatus = (String) request.getAttribute("completeStatus");
String applicationName = (String) request.getAttribute("applicationName"); 
String buildAndroid = (String) request.getAttribute("buildAndroid"); 
String buildWindows = (String) request.getAttribute("buildWindows"); 
String buildiOS = (String) request.getAttribute("buildiOS");
String uploadCompleteStatus = (String) request.getAttribute("uploadCompleteStatus"); 
String startBuild = (String) request.getAttribute("startBuild"); 
String finishBuild = (String) request.getAttribute("finishBuild"); 

out.println(uploadStatus + "<br>");
out.println(readStatus + "<br>");
out.println(saveStatus + "<br>");
out.println(applicationName + "<br>");
out.println(buildAndroid + "<br>");
out.println(buildWindows + "<br>");
out.println(buildiOS + "<br>");
out.println(uploadCompleteStatus + "<br>");
out.println(startBuild + "<br>");
out.println(finishBuild + "<br>");

It works perfectly, but the code is lengthy and not very expnadable. I am wondering if their is a way to do this simpler in the JSP with a for loop and possibly a wildcard character. Anybody have any ideas?

Thanks

MattTheHack
  • 1,354
  • 7
  • 28
  • 48

3 Answers3

4

Why don't you add all status variables to a List<String> and add the List to a request attribute? This way you can use a single loop to output all variables.

List<String> statusItems = new ArrayList<>();
statusItems.add(uploadStatus);
statusItems.add(readStatus);
...
request.setAttribute("statusItems", statusItems);

BTW, the use of scriptlets in JSPs is discouraged. Use JSTL:

<c:forEach var="status" items="${requestScope.statusItems}">
  ${status} <br/>
</c:forEach>

Or use <c:out value="${status}"/> within forEach if you want your status values to be HTML-escaped.

c.P.u1
  • 16,664
  • 6
  • 46
  • 41
3

Make use the req.getAttributeNames()

    Enumeration attrs =  req.getAttributeNames();
    while(attrs.hasMoreElements()) {
        String val = (String) req.getAttribute((String) attrs.nextElement());
        System.out.println(val);
    }
Suresh Atta
  • 120,458
  • 37
  • 198
  • 307
1

Sure try this:

for (String lAttributeName : request.getAttributeNames()){
       System.out.println((String)request.getAttribute(lAttributeName));
}
nano_nano
  • 12,351
  • 8
  • 55
  • 83