Ok, this looks promising.  I changed the package in my struts.xml to the
following:
-------------
    <package extends="json-default" name="json" namespace="/json">
        <action name="Form" class="com.wamu.strutsform.FormAction"
method="jsonSubmit">
            <interceptor-ref name="logger"></interceptor-ref>
            <interceptor-ref
name="jsonValidationWorkflowStack"></interceptor-ref>
            <result type="json">
                <param name="wrapWithComments">true</param>
            </result>
            <result name="input">/form.jsp</result>
        </action>
    </package>
------------- 

I then copied in updated jars from 2.1.2, being:

commons-fileupload-1.2.1.jar, xstream-1.2.2.jar, json-lib-2.1.jar,
struts2-core-2.1.2.jar, xwork-2.1.1.jar, freemarker-2.3.12.jar,
struts2-config-browser-plugin-2.1.2.jar

My results are a bit worse than before, however.  Now, whether it passes
validation or not I see a long set of exceptions in the log.  If it
passes validation, I still get a good JSON result.  If it doesn't pass
validation, my responseText is the input JSP.

-----------------------
ognl.ExpressionSyntaxException: Malformed OGNL expression: [object
Object] [ognl.ParseException: Encountered "Object" at line 1, column 9.
Was expecting one of:
    "," ...
    "=" ...
    "?" ...
...
/-- Encapsulated exception ------------\
ognl.ParseException: Encountered "Object" at line 1, column 9.
Was expecting one of:
    "," ...
...
\--------------------------------------/
expr: [object Object] val: [Ljava.lang.String;@fa97f context:
[EMAIL PROTECTED] root:[EMAIL PROTECTED],
[EMAIL PROTECTED] value:
[Ljava.lang.String;@fa97f
Jun 15, 2008 8:06:10 PM
com.opensymphony.xwork2.util.logging.commons.CommonsLogger error
SEVERE: ParametersInterceptor - [setParameters]: Unexpected Exception
caught setting '[object Object]' on 'class
com.wamu.strutsform.FormAction: Error setting expression '[object
Object]' with value '[Ljava.lang.String;@fa97f'
Jun 15, 2008 8:06:10 PM com.wamu.strutsform.FormAction jsonSubmit
-----------------------


> -----Original Message-----
> From: Musachy Barroso [mailto:[EMAIL PROTECTED] 
> Sent: Sunday, June 15, 2008 5:09 PM
> To: Struts Users Mailing List
> Subject: Re: Some confusion trying to do ajax form submit
> 
> Take a look at this (2.1 only):
> 
> http://struts.apache.org/2.0.11.1/docs/ajax-validation.html
> 
> musachy
> 
> On Sun, Jun 15, 2008 at 8:02 PM, Karr, David 
> <[EMAIL PROTECTED]> wrote:
> > I have a simple page with validation that I got working with a 
> > conventional submit and action.
> >
> > I'm now trying to explore doing an Ajax form submit, and getting a 
> > JSON response.  I'm using YUI on the client side.  I'd like 
> to see if 
> > I can get similar data in the JSON response that I would in 
> a normal 
> > submit, for instance, with field errors.
> >
> > There are a couple points I could use some help with, not 
> necessarily 
> > related to Ajax or JSON.  Please don't hesitate to tell me if I'm 
> > doing something else wrong, or something I should be aware of.
> >
> > My first attempt actually did execute the Ajax request, and got the 
> > response, but it wasn't JSON.  The responseText was just 
> the HTML of 
> > my source JSP, which is also the value of my "input" 
> result.  I tried 
> > setting up the JSON action without an "input" result, but 
> it seemed to 
> > complain if I didn't have that.  I would have thought the "input"
> > parameter wouldn't be relevant in a Ajax/JSON action.  If I 
> filled in 
> > all the required fields so it didn't result in any field 
> errors, the 
> > response was JSON, and it was reasonable (although setting 
> > "wrapWithComments" didn't appear to have any effect).  I 
> guess there's 
> > no automatic provision for reporting field errors in a JSON 
> response, 
> > so I guess I'll have to build something like that by hand?
> >
> > Note that I tried to enable the logging interceptor, but I 
> didn't see 
> > any output from it.
> >
> > I have a single action that I was intending to use to 
> handle both the 
> > ajax and non-ajax submit.  I tried to make it use two 
> different action 
> > names in the form, but it seemed to have trouble with that.
> >
> > I noticed in the generated HTML, I had this in the HTML for the form
> > tag:
> >
> >        onsubmit="return YAHOO.strutsform.submitform();; 
> return true;"
> >
> > I'm not sure if that "return true;" will cause me trouble, as I'm 
> > trying to bypass the normal form submission.  I think by returning 
> > false from "submitform", I achieved that, however.
> >
> > I'll include here the relevant files.  Please comment where 
> appropriate.
> > Thanks for your input.
> > ---form.jsp------------
> > <%@ page language="java" contentType="text/html; charset=UTF-8"
> >    pageEncoding="UTF-8"%>
> > <%@ taglib prefix="s" uri="/struts-tags" %> <!DOCTYPE html PUBLIC 
> > "-//W3C//DTD HTML 4.01 Transitional//EN"
> > "http://www.w3.org/TR/html4/loose.dtd";>
> > <html>
> > <head>
> > <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
> > <title>Struts Form</title> <link rel="stylesheet"
> > 
> href="${pageContext.request.contextPath}/struts/css_xhtml/styles.css"
> > type="text/css">
> > <link rel="stylesheet" type="text/css"
> > href="${pageContext.request.contextPath}/style/form.css">
> > <!-- css -->
> > <link rel="stylesheet" type="text/css"
> > 
> href="${pageContext.request.contextPath}/yui/reset-fonts-grids/reset-f
> > on
> > ts-grids.css">
> > <link rel="stylesheet" type="text/css"
> > 
> href="${pageContext.request.contextPath}/yui/button/assets/skins/sam/b
> > ut
> > ton.css">
> > <link rel="stylesheet" type="text/css"
> > 
> href="${pageContext.request.contextPath}/yui/logger/assets/skins/sam/l
> > og
> > ger.css">
> > <!-- js -->
> > <script type="text/javascript"
> > 
> src="${pageContext.request.contextPath}/yui/utilities/utilities.js"></
> > sc
> > ript>
> > <script type="text/javascript"
> > 
> src="${pageContext.request.contextPath}/yui/button/button-debug.js"></
> > sc
> > ript>
> > <script type="text/javascript"
> > 
> src="${pageContext.request.contextPath}/yui/json/json-debug.js"></scri
> > pt
> >>
> > <script type="text/javascript"
> > 
> src="${pageContext.request.contextPath}/yui/logger/logger-debug.js"></
> > sc
> > ript>
> > <script type="text/javascript"
> > 
> src="${pageContext.request.contextPath}/scripts/strutsform.js"></scrip
> > t>
> > </head>
> > <body class="yui-skin-sam">
> >    <h4>Enter your data</h4>
> >    <!--  onsubmit="return YAHOO.strutsform.submitform();" -->
> >    <s:form id="form" action="Form" onsubmit="return 
> > YAHOO.strutsform.submitform();">
> >        <s:textfield name="lastName" label="Last Name"/>
> >        <s:textfield name="firstName" label="First Name"/>
> >        <button id="formsubmit" type="submit">Submit</button>
> >    </s:form>
> >    <script  type="text/javascript">
> >        YAHOO.util.Event.onDOMReady(YAHOO.strutsform.init);
> >    </script >
> > </body>
> > </html>
> > ---------------
> > ---struts.xml------------
> > <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC 
> > "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 
> > "struts-2.0.dtd" > <struts>
> >    <constant name="struts.devMode" value="true" />
> >    <package extends="struts-default" name="main" namespace="/main">
> >        <action name="main">
> >            <result>/form.jsp</result>
> >        </action>
> >        <action name="Form" class="com.wamu.strutsform.FormAction">
> >            <result name="input">/form.jsp</result>
> >            <result>/form.jsp</result>
> >        </action>
> >    </package>
> >
> >    <package extends="json-default" name="json" namespace="/json">
> >        <action name="Form" class="com.wamu.strutsform.FormAction"
> > method="jsonSubmit">
> >            <interceptor-ref name="logger"></interceptor-ref>
> >            <interceptor-ref name="completeStack"></interceptor-ref>
> >            <result type="json">
> >                <param name="wrapWithComments">true</param>
> >            </result>
> >            <result name="input">/form.jsp</result>
> >        </action>
> >    </package>
> > </struts>
> > ---------------
> > ---FormAction.java------------
> > package com.wamu.strutsform;
> > import org.apache.commons.logging.Log; import 
> > org.apache.commons.logging.LogFactory;
> > import com.opensymphony.xwork2.ActionSupport;
> >
> > public class FormAction extends ActionSupport {
> >    private static final Log    logger  =
> > LogFactory.getLog(FormAction.class);
> >
> >    private String  lastName;
> >    private String  firstName;
> >
> >    public String getLastName() { return lastName; }
> >    public String getFirstName() { return firstName; }
> >
> >    public void setLastName(String lastName)
> >    { this.lastName = lastName; }
> >    public void setFirstName(String firstName)
> >    { this.firstName = firstName; }
> >
> >    public String execute()
> >    {
> >        logger.info("execute.");
> >        return SUCCESS;
> >    }
> >
> >    public String jsonSubmit()
> >    {
> >        logger.info("jsonSubmit.");
> >        return SUCCESS;
> >    }
> > }
> > ---------------
> > ---strutsform.js------------
> > /**
> >  * @author u166705
> >  */
> > YAHOO.namespace("strutsform");
> >
> > YAHOO.widget.Logger.enableBrowserConsole();
> >
> > var $E    = YAHOO.util.Event;
> > var $D    = YAHOO.util.Dom;
> >
> > YAHOO.strutsform.init    =
> >    function ()
> >    {
> >        $E.onContentReady("formsubmit", function()
> >        {
> >            var submitButton  = new 
> YAHOO.widget.Button("formsubmit");
> >        });
> >    };
> >
> > YAHOO.strutsform.submitform    =
> >    function()
> >    {
> >        var    callback    =
> >        {
> >            success: function(obj)
> >            {
> >                YAHOO.log("obj.responsetext[" + 
> obj.responseText + "]");
> >            },
> >            failure: function(obj)
> >            {
> >                YAHOO.log("obj.responseText[" + 
> obj.responseText + "]");
> >            }
> >        };
> >        YAHOO.util.Connect.setForm(document.getElementById("form"));
> >        YAHOO.util.Connect.asyncRequest("POST",
> > "/strutsform/json/Form.action",
> >                                        callback, null);
> >        return false;
> >    };
> > ---------------
> >
> >
> 
> 
> 
> --
> "Hey you! Would you help me to carry the stone?" Pink Floyd
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
> 
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to