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]