You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@struts.apache.org by bu...@apache.org on 2003/01/09 18:40:22 UTC

DO NOT REPLY [Bug 15927] New: - ClassCastException when using the StrutsTag with scriptlets

DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=15927>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=15927

ClassCastException when using the StrutsTag with scriptlets

           Summary: ClassCastException when using the StrutsTag with
                    scriptlets
           Product: Struts
           Version: 1.1 Beta 3
          Platform: Other
        OS/Version: Other
            Status: NEW
          Severity: Normal
          Priority: Other
         Component: Custom Tags
        AssignedTo: struts-dev@jakarta.apache.org
        ReportedBy: Maarten.Coene@qmedit.com


Hi,

Jasper generates a ClassCastException if you use scriptlets in the StrutsTag. 
For example, the following jsp-code gives this error:

<logic:iterate id="L0" name="items" 
type="org.apache.struts.tiles.beans.MenuItem">
    <bean:struts id="action" mapping="<%=L0.getLink()%>"/>
</logic>

When Jasper tries to compile this jsp, a ClassCastException is thrown. This is 
caused by the implementation of the getVariableInfo(TagData data) method in 
the StrutsTei class. The following code (taken from the getVariableInfo 
method) is the cause of this exception:

data.getAttributeString("mapping") != null

Because when Jasper compiles the jsp, it will put a dummy object in the 
TagData for the "mapping" attribute because there is no value for that 
scriptlet at compile time. This dummy object is the TagData.REQUEST_TIME_VALUE 
object (which is not a String). During compilation, Jasper calls the 
getVariableInfo method of the StrutsTei class and in this way, a 
ClassCastException if thrown because an attempt is made to cast 
TagData.REQUEST_TIME_VALUE to a String.

regards,
Maarten Coene

Here is a simple patch to fix this:

cvs diff -u StrutsTei.java 
Index: StrutsTei.java
===================================================================
RCS file: /home/cvspublic/jakarta-
struts/src/share/org/apache/struts/taglib/bean/StrutsTei.java,v
retrieving revision 1.3
diff -u -r1.3 StrutsTei.java
--- StrutsTei.java	12 Feb 2001 01:26:57 -0000	1.3
+++ StrutsTei.java	9 Jan 2003 17:23:22 -0000
@@ -85,11 +85,11 @@
     public VariableInfo[] getVariableInfo(TagData data) {
 
         String type = null;
-        if (data.getAttributeString("formBean") != null)
+        if (data.getAttribute("formBean") != null)
             type = "org.apache.struts.action.ActionFormBean";
-        else if (data.getAttributeString("forward") != null)
+        else if (data.getAttribute("forward") != null)
             type = "org.apache.struts.action.ActionForward";
-        else if (data.getAttributeString("mapping") != null)
+        else if (data.getAttribute("mapping") != null)
             type = "org.apache.struts.action.ActionMapping";
         else
             type = "java.lang.Object";

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>