2009-10-28 3 views
10

Sto provando a passare una variabile java da un tag jsp personalizzato (Im utilizzando struts2 qui per ottenere la variabile dalla classe java). Ecco l'errore che sto ottenendo.Passaggio di un valore di oggetto Java nel tag JSP personalizzato

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

Qui è la mia pagina JSP (parte)

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

io non sono in grado di trasmettere correttamente il parametro parentId. Sono stato in grado di passare correttamente il parametro parentType poiché implicava solo il passaggio della stringa

Ecco il file 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> 

E la classe java del tag personalizzato.

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

} 

Qualcuno può comunicarmi come passare una variabile java tramite tag jsp personalizzato.

Grazie, Aditya

risposta

13

L'elemento <rtexpvalue> nel dominio di primo livello dovrebbe essere <rtexprvalue> e deve essere impostato su true:

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

In questo modo le espressioni di runtime da fornire come valore dell'attributo. Rimango sconcertato su chi sul team di progettazione di JSP ha pensato che fosse una buona idea consentire che fosse impostato su false.

+0

Grazie per la risposta, ma anche dopo aver impostato l'attributo di 'vero' sto ottenendo lo stesso messaggio di errore. Il tag jsp personalizzato con l'attributo è corretto? –

+4

C'era un errore di battitura (presente anche nel post di OP), dovrebbe essere 'rtexprvalue' invece di' rtexpvalue'. Ho aggiornato la risposta. – BalusC

+0

Questo era esattamente il mio problema - grazie mille! –

-2

Provare avvolgendo il valore parentId in $ {}

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