I'm continuing to play with Flow and in particular, XMLForms:

Today I decided to refactor the flow-driven feedback wizard in the samples:

http://localhost:8080/cocoon/samples/xmlform/flow

In particular, I wanted to get rid of the inlined validation function definitions in the calls to Xform.sendview ().

So I went into feedbackWizard.js and defined a userinfo object with a member, bean, and the two validation functions defined as methods.

However when I restarted Cocoon, it looks like XForm.sendView is not getting the validation function passed to it, as when I enter data that would trigger the validator, it's ignored, and only the Schematron validation's applied.

I know that passing a function as data in JavaScript's a little non-obvious.

----
Here's my revisions to feedbackWizard.js

// XML Form Feedback Wizard Application

cocoon.load("resource://org/apache/cocoon/components/flow/javascript/ xmlForm.js");

/**
 * Constructor for UserInfo object
 */
function UserInfo ()
{
        this.bean = null;
}

/**
 * Validate UserIdentity
 * @param xform XForm object
 */
function UserInfo_validateUserIdentity (xform)
{
        var bean = xform.getModel();
        print("I can also do validation in JavaScript");
        print("age = "+xform.getValue("number(/age)"));
        print("role = "+bean.role);
        if (bean.age > 40) {
                xform.addViolation("/age", "Hey, you're too old");
        }
}

UserInfo.prototype.validateUserIdentity = function (xform)
{
        UserInfo_validateUserIdentity (xform);
}

/**
 * Validate Deployment
 * @param xform XForm object
 */
function UserInfo_validateDeployment (xform)
{
        var bean = xform.getModel();
        print("I can also do validation in JavaScript");
        if (bean.publish) {
                xform.addViolation("/publish", "Sorry, I won't let you publish");
        }
}

UserInfo.prototype.validateDeployment = function (xform)
{
        UserInfo_validateDeployment (xform);
}

function feedbackWizard(xform) {
        var userinfo = new UserInfo ();
    userinfo.bean = {
        firstName: "Donald",
        lastName: "Duck",
        email: "[EMAIL PROTECTED]",
        age: 5,
        number: 1,
        liveUrl: "http://";,
        publish: true,
        hidden: true,
        count: 1,
        notes: "<your notes here>",
        favorite: ["http://xml.apache/org/cocoon";,
                   "http://jakarta.apache.org";,
                   "http://www.google.com";,
                   "http://www.slashdot.com";,
                   "http://www.yahoo.com";],
        hobby: ["swim", "movies", "ski", "gym", "soccer"],
        allHobbies: [
            {
                key: "swim",
                value: "Swimming"
            },
            {
                key: "gym",
                value: "Body Building"
            },
            {
                key: "ski",
                value: "Skiing"
            },
            {
                key: "run",
                value: "Running"
            },
            {
                key: "football",
                value: "Football"
            },
            {
                key: "read",
                value: "Reading"
            },
            {
                key: "write",
                value: "Writing"
            },
            {
                key: "soccer:",
                value: "Soccer"
            },
            {
                key: "blog",
                value: "Blogging"
            }],
        role: ["Hacker", "Executive"],
        system: {
            os: "Unix",
            processor: "p4",
            ram: 512,
            servletEngine: "Tomcat",
            javaVersion: "1.3",
        }
    }

xform.setModel(userinfo.bean);

    xform.sendView("userIdentity",
                   "userIdentity.xml",
                   userinfo.validateUserIdentity (xform));

// move this into a method of UserInfo

/*                    function(xform) { */
/*        var bean = xform.getModel(); */
/*         print("I can also do validation in JavaScript"); */
/*         print("age = "+xform.getValue("number(/age)")); */
/*         print("role = "+bean.role); */
/*        if (bean.age > 40) { */
/*             xform.addViolation("/age", "Hey, you're too old"); */
/*         } */
/*     }); */
    print("handling user identity");

    xform.sendView("deployment",
                   "deployment.xml",
                   userinfo.validateDeployment (xform));

// move this into a method of UserInfo

/* function(xform) { */
/* var bean = xform.getModel(); */
/* print("I can also do validation in JavaScript"); */
/* if (bean.publish) { */
/* xform.addViolation("/publish", "Sorry, I won't let you publish"); */
/* } */
/* }); */
print("handling deployment");


    xform.sendView("system", "system.xml");
    print("handling system");

    xform.sendView("confirm", "confirm.xml");
    print("handling confirm");

    xform.finish("end.xml");
    print("done");
}


-- whump



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



Reply via email to