Hello,
Migrating from 1.4.3 to 1.5, I stumbled upon a problem in the
compilation of jsp files.
It occurs when trying to use variables in binding names:
<stripes:useActionBean binding="/stuff/${binding}" var="actionBean" />
Everything used to work fine in 1.4.3, but since the introduction of
new validations (notably in UseActionBeanTagExtraInfo), jsp
compilation fails.
this is the kind of error I get (note the getAttributeString, which
assumes we have a String, although it is not the case here):
> [jasperc] java.lang.ClassCastException: java.lang.Object cannot be cast to
> java.lang.String
> [jasperc] at
> javax.servlet.jsp.tagext.TagData.getAttributeString(TagData.java:138)
> [jasperc] at
> net.sourceforge.stripes.tag.UseActionBeanTagExtraInfo.validate(UseActionBeanTagExtraInfo.java:73)
> [jasperc] at javax.servlet.jsp.tagext.TagInfo.validate(TagInfo.java:274)
> [jasperc] at
> org.apache.jasper.compiler.Validator$TagExtraInfoVisitor.visit(Validator.java:1669)
> [jasperc] at
> org.apache.jasper.compiler.Node$CustomTag.accept(Node.java:1507)
> [jasperc] at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2338)
> [jasperc] at
> org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2388)
> [jasperc] at
> org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2394)
> [jasperc] at org.apache.jasper.compiler.Node$Root.accept(Node.java:489)
> [jasperc] at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2338)
> [jasperc] at
> org.apache.jasper.compiler.Validator.validate(Validator.java:1749)
> [jasperc] at
> org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:178)
> [jasperc] at
> org.apache.jasper.compiler.Compiler.compile(Compiler.java:306)
> [jasperc] at org.apache.jasper.JspC.processFile(JspC.java:1007)
> [jasperc] at org.apache.jasper.JspC.execute(JspC.java:1156)
> [jasperc] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> [jasperc] at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> [jasperc] at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> [jasperc] at java.lang.reflect.Method.invoke(Method.java:597)
> [jasperc] at
> org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:105)
> [jasperc] at
> org.apache.tools.ant.TaskAdapter.execute(TaskAdapter.java:134)
> [jasperc] at
> org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
> [jasperc] at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
> [jasperc] at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> [jasperc] at java.lang.reflect.Method.invoke(Method.java:597)
> [jasperc] at
> org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:105)
> [jasperc] at org.apache.tools.ant.Task.perform(Task.java:348)
> [jasperc] at org.apache.tools.ant.Target.execute(Target.java:357)
> [jasperc] at org.apache.tools.ant.Target.performTasks(Target.java:385)
> [jasperc] at
> org.apache.tools.ant.Project.executeSortedTargets(Project.java:1329)
> [jasperc] at
> org.apache.tools.ant.Project.executeTarget(Project.java:1298)
> [jasperc] at
> org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
> [jasperc] at
> org.eclipse.ant.internal.ui.antsupport.EclipseDefaultExecutor.executeTargets(EclipseDefaultExecutor.java:32)
> [jasperc] at
> org.apache.tools.ant.Project.executeTargets(Project.java:1181)
> [jasperc] at
> org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.run(InternalAntRunner.java:423)
> [jasperc] at
> org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.main(InternalAntRunner.java:137)
>
> BUILD FAILED
> C:\dev\workspace\Attend7-current-dev\build.xml:88:
> org.apache.jasper.JasperException: java.lang.ClassCastException:
> java.lang.Object cannot be cast to java.lang.String
I reported this problem here :
http://www.stripesframework.org/jira/browse/STS-601
Unfortunately, workarounds like hardcoding the binding action name is
problematic for my application.
So far, my only solution was to modify the UseActionBeanTagExtraInfo
class so that parameters are not assumed to be strings:
original code is:
String binding = tag.getAttributeString("binding");
my code:
String binding = null;
boolean ignoreBinding = false;
try {
binding = tag.getAttributeString("binding");
} catch (ClassCastException e) {
ignoreBinding = true;
}
if (!ignoreBinding && !(beanclass != null ^ binding != null)) {
I wonder whether other people have had the same problem, and whether
my solution is an acceptable one, or (much better) if there is another
way to solve the issue?
Thanks!
Matt.
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Stripes-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/stripes-users