2009-10-28 6 views
10

J'essaie de transmettre une variable java à partir d'une balise jsp personnalisée (Im en utilisant struts2 ici pour obtenir la variable de la classe java). Voici l'erreur que je reçois.Passage d'une valeur d'objet Java dans la balise JSP personnalisée

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

Voici ma page jsp (partie)

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

Je ne suis pas en mesure de passer le paramètre parentId correctement. J'ai réussi à passer le paramètre parentType correctement car il ne s'agissait que de passer la chaîne

Voici le fichier 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> 

Et la classe java de la balise personnalisée. Quelqu'un peut-il s'il vous plaît laissez-moi savoir comment passer une variable java à l'aide d'une balise jsp personnalisée.

Merci, Aditya

Répondre

13

L'élément <rtexpvalue> dans votre TLD devrait être <rtexprvalue> et doit être mis à true:

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

Cela permet des expressions d'exécution à fournir la valeur d'attribut. Je reste mystifié quant à qui dans l'équipe de conception de JSP a pensé que c'était une bonne idée de permettre que cela soit réglé à false.

+0

Merci pour la réponse, mais même après avoir défini l'attribut à « true » Je reçois le même message d'erreur. La balise jsp personnalisée avec l'attribut correct? –

+4

Il y avait une faute de frappe (également présente dans la publication de OP), elle devrait être 'rtexprvalue' au lieu de' rtexpvalue'. J'ai mis à jour la réponse. – BalusC

+0

C'était exactement mon problème aussi - merci beaucoup! –

-2

Essayez d'envelopper la valeur parentId dans $ {}

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