jsp: param with the Java class

advertisements

I have a JSP file that includes another JSP file. The first JSP should pass an instance of a Java class (widget) to the second JSP file.

This is what I have:

The first JSP:

<jsp:include page="/container/SpecialWidget.jsp">
     <jsp:param name="widget" value="${widget}"/> // widget is a .Java POJO
</jsp:include>

The second JSP:

${param.widget.id}

The problem is that this code gives an error (it says it doesn't know ID). If I omit the ".id" part, the page prints the Java code for the Java class, which means the class has been transferred correctly. If I change the ${widget} rule of the first page in, for example, ${widget.id} and I try to print ${param.widget}, everything works fine.

My question: Why can't I pass a Java class and directly call upon its attributes? What am I doing wrong?

Edit: error message: Caused by: javax.el.PropertyNotFoundException: Property 'id' not found on type java.lang.String


When you pass the variable ${widget} it is translated at request time to a string (widget.toString()). This value is then passed to the second JSP as a String, not as the original java object.

One approach to access the object's values is setting the parameter's value with the attribute's value:

<jsp:param name="widgetId" value="${widget.id}"/>

Then use the code bellow on the second JSP:

${param.widgetId}

You can also set widget as an request attribute and use it on the second page as ${widget.id} or ${request.widget.id}. I suggest you use the second approach.