tags:

views:

1104

answers:

2

Hi all,

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"&gt;
<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()+"&nbsp;");
          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

+3  A: 

The <rtexpvalue> element in your TLD needs to be set to true:

  <attribute>
     <name>parentId</name>
     <required>true</required>
     <rtexpvalue>true</rtexpvalue>
  </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.

skaffman
Thanks for the answer, but even after setting the attribute to 'true' I'm getting the same error message. Is the custom jsp tag with the attribute correct?
Aditya R
A: 

Try wrapping the parentId value in ${}

<custom:zorancustomtag  parentType = "BIDFORM" parentId = "${<%= pageContext.getAttribute("bidFormOid") %>}" />
Gthompson83