JSP and JSTL experiences

Lucas Jellema 1
0 0
Read Time:2 Minute, 5 Second

This post describes some of my recent experiences in using JSP and JSTL. For many probably highly trivial.

A dynamic include of a JSP (fragment), using jsp:include, allows passing of parameters, using jsp:param. However, such parameters are always String values. I needed to pass an array (String[]) and could not figure out how to. Using a scriptlet to define an array, add it to the pageContext (see for example) and reference it in the JSP fragment did not work:

<%
  String[] lov = {"a","b", "c"};
  pageContext.setAttribute("lov", lov);
%>

This is only logical once you realize that a jsp:include turns over control to a JSP that to all intents a purposes is a new, stand-alone JSP with its own pageContext. However, JSTL comes to the rescue. It turns out that the forEach tag recognizes a comma separated list of values. Note however that JSTL does not now consider the parameter a String[], it is still a String.

Code to call the JSP fragment:

<jsp:include page="lovPopup.jsp" flush="true">
                    <jsp:param name="lovParam" value="a,b,c"/>
</jsp:include>

Code in called JSP fragment:

<bean:parameter id="lov" name="lovParam"/>
  <c:forEach var="listItem" items="${lov}"/>
     <c: out value="${listItem}" />
  </c>
</c>

It is important that the JSP fragment is also “JSTL enabled” (initially I erroneously thought that somehow this JSP would inherit the taglibraries imported by the JSP that invokes it), by importing the Core JSTL library:

<%@ taglib uri="/WEB-INF/c.tld" prefix="c" %>

Now it is not possible to refer to

${lov [1]};

even though forEach knows how to iterate through a comma-separated String, it does not mean that it is equivalent to a String[] (error: Unable to find a value for “1” in object of class “java.lang.String” using operator “[]” (null)).

It should be possible to put an attribute of type String[] in the requestScope, rather than the pageScope, and thus transfer a typed object, rather than just a String, to the included JSP fragent.

<%
  String[] lov = {"a","b", "c"};
  pageContext.setAttribute("lov", lov, PageContext.REQUEST_SCOPE);
%>

and to get access to the lov object in the included JSP fragment:

  <c:set var="list" value="${lov}" scope="request" />
  <c: out value="${list [1]}" />
  <c:forEach var="listItem" items="${list}"/>
  <c: out value="${listItem}" />
  </c:forEach>

About Post Author

Lucas Jellema

Lucas Jellema, active in IT (and with Oracle) since 1994. Oracle ACE Director and Oracle Developer Champion. Solution architect and developer on diverse areas including SQL, JavaScript, Kubernetes & Docker, Machine Learning, Java, SOA and microservices, events in various shapes and forms and many other things. Author of the Oracle Press book Oracle SOA Suite 12c Handbook. Frequent presenter on user groups and community events and conferences such as JavaOne, Oracle Code, CodeOne, NLJUG JFall and Oracle OpenWorld.
Happy
Happy
0 %
Sad
Sad
0 %
Excited
Excited
0 %
Sleepy
Sleepy
0 %
Angry
Angry
0 %
Surprise
Surprise
0 %

Average Rating

5 Star
0%
4 Star
0%
3 Star
0%
2 Star
0%
1 Star
0%

One thought on “JSP and JSTL experiences

  1. how to use the jstl core(url) for querystrings.i want to pass the url with query strings.
    even i can not able to use this query string url for ‘set’ tag all so .plz give me possible solution.

Comments are closed.

Next Post

EJB CMP/CMR example with JBoss+Xdoclet

In this post I’ll first discuss how to implement a unidirectional one-to-one relationship with EJBs, JBoss and Xdoclet in abstracto, using two tables called table1 and table2. Thereafter I’ll present a concrete example, illustrated with (more detailed) code excerpts. Related posts: Tiger (Java 5.0) Generics, auto (un)boxing and new For […]
%d bloggers like this: