Passing a Java object value in Custom JSP tag
java, jsp, jsp-tags
Solution
The `<rtexpvalue>` element in your TLD should be `<rtexprvalue>` and needs to be set to `true`:
<attribute>
<name>parentId</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
This allows runtime expressions to be supplied as the attribute value. I remain mystified as to who on the JSP design team thought it was a good idea to allow this to be set to `false`.
Problem
I'm trying to pass a java variable from a custom jsp tag(Im using struts2 here to get the variable from the java class). Here is the error I'm getting. ``` javax.servlet.ServletException: /pages/editBidForm.jsp(51,8) According to TLD or attribute directive in tag file, attribute parentId does not accept any expressions org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:515) org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:419) .... ``` Here is my jsp page(part) ``` <%@ taglib prefix="s" uri="/struts-tags" %> <%@ taglib uri="/WEB-INF/taglib.tld" prefix="custom" %> ... ... <table> <tr> <% String bidformoid=null; bidFormOid=request.getParameter("bidFormOid"); %> <td> <custom:zorancustomtag parentType = "BIDFORM" parentId = "<%= pageContext.getAttribute("bidFormOid") %>" /></td> </tr> </table> ``` I'm not able to pass the parentId parameter correctly. I was able to pass the parentType parameter correctly since it involved only passing the string Here is the taglib file. ``` <?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd"> <taglib> <tlibversion>1.0</tlibversion> <jspversion>1.1</jspversion> <shortname>custom</shortname> <tag> <name>zorancustomtag</name> <tagclass>com.zoran.action.CustomizedTag</tagclass> <bodycontent>JSP</bodycontent> <info>Tag having a body and attributes</info> <attribute> <name>name</name> <required>false</required> <rtexpvalue>false</rtexpvalue> </attribute> <attribute> <name>parentType</name> <required>true</required> <rtexpvalue>true</rtexpvalue> </attribute> <attribute> <name>parentId</name> <required>true</required> <rtexpvalue>false</rtexpvalue> </attribute> </tag> </taglib> ``` And the java class of the custom tag. ``` public class CustomizedTag implements Tag { private PageContext pageContext; private Tag parent; private String name; private int parentId; private String parentType; List list = null; public String getName() { return name; } public void setName(String name) { this.name = name; } /* public CustomizedTag() { super(); } */ public int doStartTag() throws JspException { Session session = SessionUtil.getSession(); session.beginTransaction(); try { JspWriter out = pageContext.getOut(); String parId = getParentId()+""; // out.println(getParent()+" "); String quer = "from ContentBase cb where cb.parentType=? AND cb.parentId=? ";//+parId; Query query = session.createQuery(quer); query.setParameter(0, getParentType()); query.setParameter(1, getParentId()); list = query.list(); ContentBase cb = new ContentBase(); if (null != list && !list.isEmpty()) { cb = (ContentBase) list.get(0); } // pageContext.getOut().print("Sri "+getName()); out.println(cb.getDescription()); } catch (IOException ioe) { throw new JspException("Error:"+ioe.getMessage()); } return SKIP_BODY; } public int doEndTag() throws JspException { return SKIP_PAGE; } public void release() { } public void setPageContext(PageContext pageContext) { this.pageContext = pageContext; } public void setParent(Tag parent) { this.parent = parent; } public Tag getParent() { return parent; } public int getParentId() { return parentId; } public void setParentId(int parentId) { this.parentId = parentId; } public String getParentType() { return parentType; } public void setParentType(String parentType) { this.parentType = parentType; } } ``` Can anyone please let me know how to pass a java variable through custom jsp tag. Thanks, Aditya