Передача значения объекта Java в пользовательском теге JSP

Я пытаюсь передать переменную java из настраиваемого тега jsp (я использую struts2 здесь, чтобы получить переменную из класса java). Вот ошибка, которую я получаю.

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)
    ....

Вот моя страница jsp (часть)

<%@ 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>

Я не могу правильно передать параметр parentId. Мне удалось правильно передать параметр parentType, поскольку он включал только передачу строки

Вот файл taglib.

<?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>

И Java-класс настраиваемого тега.

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;
}

}

Может ли кто-нибудь сообщить мне, как передать переменную java через пользовательский тег jsp.

Спасибо, Адитья


person Aditya R    schedule 28.10.2009    source источник


Ответы (2)


Элемент <rtexpvalue> в вашем TLD должен быть <rtexprvalue> и должен иметь значение true:

  <attribute>
     <name>parentId</name>
     <required>true</required>
     <rtexprvalue>true</rtexprvalue>
  </attribute>

Это позволяет предоставлять выражения среды выполнения в качестве значения атрибута. Я остаюсь в недоумении относительно того, кто из команды разработчиков JSP подумал, что было бы неплохо установить для этого параметра значение false.

person skaffman    schedule 28.10.2009
comment
Спасибо за ответ, но даже после того, как для атрибута установлено значение «true», я получаю то же сообщение об ошибке. Правильно ли настроен пользовательский тег jsp с атрибутом? - person Aditya R; 29.10.2009
comment
Произошла опечатка (также присутствует в сообщении OP), это должно быть rtexprvalue вместо rtexpvalue. Я обновил ответ. - person BalusC; 19.03.2011
comment
Я не понял, можно ли здесь отправлять сообщения в личку, но спасибо @BalusC за то, что вы постоянно помогаете нам! Мне очень помогли многие из ваших ответов. Большое спасибо! - person jumps4fun; 19.03.2014

Попробуйте заключить значение parentId в $ {}

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