0

I have a class that looks like this:

public class Foobar {
   private float value;
   public void setValue(float value) {
      this.value = value;
   }
}

I then have a webpage (Struts2) that passed in a variable foobar.value.

<input type="text" name="foobar.value" value="123.456">

I then get this error:

ognl.MethodFailedException: Method "setValue" failed for object Foobar@19d373d [java.lang.NoSuchMethodException: setValue([Ljava.lang.String;)]
    at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:823)

I found this website that talks about creating converters http://www.opensymphony.com/ognl/html/DeveloperGuide/typeConversion.html

Doesn't OGNL and Struts2 have support for setting a primitive float by default?

mskfisher
  • 3,291
  • 4
  • 35
  • 48
Trevor Allred
  • 888
  • 2
  • 13
  • 22

2 Answers2

0

If you change value to Float (the Object), does that work?

Nate
  • 2,407
  • 22
  • 22
0

OK, I figured it out. The above code DOES work. But this does NOT work.

 <input type="text" name="foobar.value" value="-123.456">

Apparently OGNL interprets the negative number as a String. I'm not sure how to deal with this without a converter. It's nice to know that it will handle positive float and Float natively.

I did some further research on this about found this bug. http://issues.apache.org/struts/browse/WW-2971

It's closed but the version 2.1.8 isn't in Maven and the latest version of Struts2 doesn't rely on it yet. :(

I think I'll be writing a converter for now.

Trevor Allred
  • 888
  • 2
  • 13
  • 22