struts-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Burton Rhodes <burtonrho...@gmail.com>
Subject Re: Struts2 json-plugin - issue setting nested bean?
Date Wed, 29 Oct 2014 02:31:29 GMT
That's it... thank you!  However, the docs mention that the JSON string
must be "well formed" and it specifically demonstrates that my first
attempt should have worked in the "nestedBean" example (see below).  Plus
jQuery serializes the form that why by default accommodating for the dot
notation ;-)

I guess what I'm really asking is, do you think this was implemented
incorrectly and should be coded differently to be more intuitive and
account for more "standard" serialization of a html form?  What I love
about Struts is most things with it just work - this seems to be one of the
few areas where it doesn't.

http://struts.apache.org/release/2.3.x/docs/json-plugin.html

Specifically where it mentions "nestedBean" and the description below the
code example "There must be a "setNestedBean" whose argument type can be
any class, that has a "setName" method taking as argument an "String"." :

{
   "doubleValue": 10.10,
   "nestedBean": {
      "name": "Mr Bean"
   },
   "list": ["A", 10, 20.20, {
      "firstName": "El Zorro"
   }],
   "array": [10, 20]
}

The action must have a "setDoubleValue" method, taking either a "float" or
a "double" argument (the interceptor will convert the value to the right
one). There must be a "setNestedBean" whose argument type can be any class,
that has a "setName" method taking as argument an "String". There must be a
"setList" method that takes a "List" as argument, that list will contain:
"A" (String), 10 (Long), 20.20 (Double), Map ("firstName" -> "El Zorro").
The "setArray" method can take as parameter either a "List", or any numeric
array.

On Tue, Oct 28, 2014 at 6:45 PM, JOSE L MARTINEZ-AVIAL <jlmagc@gmail.com>
wrote:

> Unless you use the json inteceptor to map the request boy to the action,
> you need to send the contact firstName as "contact.firstName", so Struts
> will invoke
>
> setContact(new Contcat());
> getContact().setFirstName("John");
>
> -- JSON TEST SUBMISSION --
> $.ajax({
>   ... other ajax settings ...
>  // manually insert data for testing
>  data    : {"testValue":"yes","contact.firstName":"John","contactId":100},
> });
>
>
>
> 2014-10-28 18:19 GMT-04:00 Burton Rhodes <burtonrhodes@gmail.com>:
>
> > I am having issues setting nested parameters on an object using the
> > json-plugin.  I've created a basic example that I'm currently testing.
> > When debugging at the "return SUCCESS" line, both the testValue and
> > contactId variables are set correctly.  The contact variable, however, is
> > null.  The relevant console lines line is "WARN : Parameter
> > [contact[firstName]] didn't match acceptedPattern pattern!" - but I'm not
> > sure how to fix that as it *should* match the setContact() setter in my
> > Action.  Any thoughts on what is going on here?  Thanks in advance....
> >
> > -- ACTION --
> > public class ContactJsonAction {
> >
> >     private Integer contactId;
> >     private Contact contact;
> >     private String testValue;
> >
> >     public String contactUpdate() throws Exception {
> >             return SUCCESS;
> >     }
> >
> >    // Getters & Setters below....
> > }
> >
> > -- JSON TEST SUBMISSION --
> > $.ajax({
> >   ... other ajax settings ...
> >  // manually insert data for testing
> >  data    : {"testValue":"yes","contact":{"firstName":"John"
> > },"contactId":100},
> > });
> >
> > -- LOGS --
> > DEBUG: Creating an DefaultActionProxy for namespace [/app/json] and
> action
> > name [ContactDetail_update]
> > Oct 28, 17:15:34 (CommonsLogger.java:72)
> > DEBUG: cannot find method [prepareContactUpdate] in action
> > [com.afs.web.action.json.ContactJsonAction@b7a6ee]
> > Oct 28, 17:15:34 (CommonsLogger.java:72)
> > DEBUG: cannot find method [prepareDoContactUpdate] in action
> > [com.afs.web.action.json.ContactJsonAction@b7a6ee]
> > Oct 28, 17:15:34 (CommonsLogger.java:72)
> > DEBUG: Setting params NONE
> > Oct 28, 17:15:34 (CommonsLogger.java:72)
> > DEBUG: Setting params testValue => [ yes ] contact[firstName] => [ Bean ]
> > contactId => [ 100 ]
> > Oct 28, 17:15:34 (CommonsLogger.java:72)
> > DEBUG: Parameter [contactId] was accepted and will be appended to action!
> > Oct 28, 17:15:34 (CommonsLogger.java:56)
> > WARN : Parameter [contact[firstName]] didn't match acceptedPattern
> pattern!
> > Oct 28, 17:15:34 (CommonsLogger.java:72)
> > DEBUG: Parameter [testValue] was accepted and will be appended to action!
> > Oct 28, 17:15:34 (CommonsLogger.java:76)
> > DEBUG: Retrieving convert for class [class
> > com.afs.web.action.json.ContactJsonAction] and property [contactId]
> > Oct 28, 17:15:34 (CommonsLogger.java:72)
> > DEBUG: field-level type converter for property [contactId] = none found
> > Oct 28, 17:15:34 (CommonsLogger.java:72)
> > DEBUG: global-level type converter for property [contactId] =
> > com.afs.web.converter.MyNumberConverter@1611a05
> > Oct 28, 17:15:34 (CommonsLogger.java:76)
> > DEBUG: Retrieving convert for class [class
> > com.afs.web.action.json.ContactJsonAction] and property [testValue]
> > Oct 28, 17:15:34 (CommonsLogger.java:72)
> > DEBUG: field-level type converter for property [testValue] = none found
> > Oct 28, 17:15:34 (CommonsLogger.java:72)
> > DEBUG: global-level type converter for property [testValue] = none found
> > Oct 28, 17:15:34 (CommonsLogger.java:72)
> > DEBUG: falling back to default type converter
> > [com.opensymphony.xwork2.conversion.impl.XWorkBasicConverter@a5eac1]
> > Oct 28, 17:15:34 (CommonsLogger.java:72)
> >
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message