coliver 2003/07/20 15:53:41
Modified: src/blocks/jxforms/java/org/apache/cocoon/components/jxforms/flow/javascript JXForm.java JXForm.js src/blocks/jxforms/samples sitemap.xmap Added: src/blocks/jxforms/samples samples.xml src/blocks/jxforms/samples/calc NumberA.xml NumberB.xml Operator.xml Result.xml calc.js src/blocks/jxforms/samples/wizard confirm.xml deployment.xml end.xml feedbackWizard.js schematron.xml start.xml system.xml userIdentity.xml Removed: src/blocks/jxforms/samples/flow feedbackWizard.js src/blocks/jxforms/samples/schematron wizard-xmlform-sch-report.xml src/blocks/jxforms/samples/view confirm.xml deployment.xml end.xml start.xml system.xml userIdentity.xml Log: Renamed jxForm() to jxform() and improved samples Revision Changes Path 1.4 +15 -8 cocoon-2.1/src/blocks/jxforms/java/org/apache/cocoon/components/jxforms/flow/javascript/JXForm.java Index: JXForm.java =================================================================== RCS file: /home/cvs/cocoon-2.1/src/blocks/jxforms/java/org/apache/cocoon/components/jxforms/flow/javascript/JXForm.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- JXForm.java 19 Jul 2003 20:18:49 -0000 1.3 +++ JXForm.java 20 Jul 2003 22:53:40 -0000 1.4 @@ -73,7 +73,6 @@ String id; String validatorNamespace; String validatorDocument; - String scope; String submitId; private FOM_Cocoon getCocoon() { @@ -91,18 +90,26 @@ boolean inNewExpr) throws Exception { String id; - String validatorNS; - String validatorDoc; - String scope; + String validatorNS = null; + String validatorDoc = null; + if (args.length < 1) { + throw new JavaScriptException("Expected an argument"); + } id = org.mozilla.javascript.Context.toString(args[0]); - validatorNS = args[1] == null ? null : org.mozilla.javascript.Context.toString(args[1]); - validatorDoc = args[2] == null ? null : org.mozilla.javascript.Context.toString(args[2]); - scope = org.mozilla.javascript.Context.toString(args[3]); + if (args.length > 1) { + validatorNS = (args[1] == null || args[1] == Undefined.instance) ? + null : + org.mozilla.javascript.Context.toString(args[1]); + if (args.length > 2) { + validatorDoc = (args[2] == null || args[2] == Undefined.instance) ? + null : + org.mozilla.javascript.Context.toString(args[2]); + } + } JXForm result = new JXForm(); result.id = id; result.validatorNamespace = validatorNS; result.validatorDocument = validatorDoc; - result.scope = scope; return result; } 1.2 +8 -8 cocoon-2.1/src/blocks/jxforms/java/org/apache/cocoon/components/jxforms/flow/javascript/JXForm.js Index: JXForm.js =================================================================== RCS file: /home/cvs/cocoon-2.1/src/blocks/jxforms/java/org/apache/cocoon/components/jxforms/flow/javascript/JXForm.js,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- JXForm.js 12 Jul 2003 19:22:29 -0000 1.1 +++ JXForm.js 20 Jul 2003 22:53:40 -0000 1.2 @@ -95,7 +95,6 @@ if (bizData == undefined) { bizData = null; } - this.lastWebContinuation = wk; this.forwardTo(uri, bizData, wk); JXForm.suicide(); } @@ -159,7 +158,11 @@ * @param scope [String] one of "request" or "session" */ -function jxForm(application, id, validator_ns, validator_doc, scope) { +function jxform(application, id, validator_ns, validator_doc) { + if (this[application] == undefined || + !(this[application] instanceof Function)) { + throw new Packages.org.apache.cocoon.ResourceNotFoundException("Function \"javascript:"+application+"()\" not found"); + } function getCommand() { var enum_ = cocoon.request.getParameterNames(); var command = undefined; @@ -192,10 +195,7 @@ return; } // Just start a new instance of the application - var args = new Array(arguments.length - 5 + 1); - args[0] = new JXForm(id, validator_ns, validator_doc, scope); - for (var i = 5; i < arguments.length; i++) { - args[i-4] = arguments[i]; - } - this[application].apply(this, args); + print("hello"); + this[application].apply(this, + [new JXForm(id, validator_ns, validator_doc, undefined)]); } 1.2 +45 -7 cocoon-2.1/src/blocks/jxforms/samples/sitemap.xmap Index: sitemap.xmap =================================================================== RCS file: /home/cvs/cocoon-2.1/src/blocks/jxforms/samples/sitemap.xmap,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- sitemap.xmap 12 Jul 2003 19:22:30 -0000 1.1 +++ sitemap.xmap 20 Jul 2003 22:53:40 -0000 1.2 @@ -39,26 +39,40 @@ <!-- =========================== Pipelines ================================= --> <map:flow language="javascript"> - <map:script src="flow/feedbackWizard.js"/> + <map:script src="calc/calc.js"/> + <map:script src="wizard/feedbackWizard.js"/> </map:flow> + <map:pipelines> <map:pipeline> <map:match pattern=""> - <map:call function="jxForm"> + <map:redirect-to uri="welcome"/> + </map:match> + + <map:match pattern="welcome"> + <map:generate src="samples.xml"/> + <map:transform src="context://samples/common/style/xsl/html/simple-samples2html.xsl"> + <map:parameter name="contextPath" value="{request:contextPath}"/> + </map:transform> + <map:serialize/> + </map:match> + + <map:match pattern="wizard/"> + <map:call function="jxform"> <map:parameter name="function" value="feedbackWizard"/> <map:parameter name="id" value="form-feedback"/> - <map:parameter name="schema-ns" value="http://www.ascc.net/xml/schematron"/> - <map:parameter name="validator-schema" value="schematron/wizard-xmlform-sch-report.xml"/> - <map:parameter name="scope" value="request"/> + <map:parameter name="validatorNamespace" value="http://www.ascc.net/xml/schematron"/> + <map:parameter name="validatorSchema" value="wizard/schematron.xml"/> + </map:call> </map:match> - <map:match pattern="view/*.xml"> + <map:match pattern="wizard/*.xml"> <!-- original XMLForm document --> - <map:generate type="jxforms" src="view/{1}.xml"/> + <map:generate type="jxforms" src="wizard/{1}.xml"/> <!-- Personalize the look and feel of the form controls --> <map:transform type="xalan" src="stylesheets/wizard2html.xsl" /> @@ -72,6 +86,30 @@ <!-- sending the HTML back to the browser --> <map:serialize type="html" label="debug"/> </map:match> + + <map:match pattern="calc/"> + <map:call function="jxform"> + <map:parameter name="function" value="calculator"/> + <map:parameter name="id" value="calc"/> + </map:call> + </map:match> + + <map:match pattern="calc/*.xml"> + <!-- original XMLForm document --> + <map:generate type="jxforms" src="calc/{1}.xml"/> + + <!-- personalizing the look and feel of the form controls --> + <map:transform src="context://samples/common/style/xsl/html/complex-page2html.xsl"> + <map:parameter name="contextPath" value="{request:contextPath}"/> + </map:transform> + + <!-- Transforming the XMLForm controls to HTML controls --> + <map:transform src="stylesheets/jxforms2html.xsl" /> + + <!-- sending the HTML back to the browser --> + <map:serialize type="html" label="debug"/> + + </map:match> </map:pipeline> 1.1 cocoon-2.1/src/blocks/jxforms/samples/samples.xml Index: samples.xml =================================================================== <samples xmlns:xlink="http://www.w3.org/1999/xlink"> <group name="Main examples page."> <sample name="Back" href="..">to Cocoon examples main page</sample> </group> <group name="Application"> <sample name="Wizard" href="wizard/"> Presents a sophisticated form handling demo ... multi-page wizard with <em>automatic</em> two-way navigation, based on Cocoon Flowscript. </sample> <sample name="Calculator" href="calc/"> JXForms calculator sample </sample> </group> </samples> 1.1 cocoon-2.1/src/blocks/jxforms/samples/calc/NumberA.xml Index: NumberA.xml =================================================================== <?xml version="1.0"?> <document> <header> <title>JXForms: Calculator</title> <tab title="Back" href=".."/> </header> <body> <section> <title>Number A</title> <xf:form id="calc" xmlns:xf="http://apache.org/cocoon/jxforms/1.0"> <p> Enter value of <strong>a</strong><br/> <xf:input ref="numberA"/> </p> <p> <xf:submit id="next" continuation="forward" class="button"> <xf:label>Next</xf:label> </xf:submit> </p> </xf:form> </section> </body> </document> 1.1 cocoon-2.1/src/blocks/jxforms/samples/calc/NumberB.xml Index: NumberB.xml =================================================================== <?xml version="1.0"?> <document> <header> <title>JXForms: Calculator</title> <tab title="Back" href=".."/> </header> <body> <section> <title>Number B</title> <xf:form id="calc" xmlns:xf="http://apache.org/cocoon/jxforms/1.0"> <p> a = <xf:output ref="numberA"/> </p> <p> Enter value of <strong>b</strong><br/> <xf:input ref="numberB"/> </p> <p> <xf:submit id="prev" continuation="back" class="button"> <xf:label>Prev</xf:label> </xf:submit> <xf:submit id="next" continuation="forward" class="button"> <xf:label>Next</xf:label> </xf:submit> </p> </xf:form> </section> </body> </document> 1.1 cocoon-2.1/src/blocks/jxforms/samples/calc/Operator.xml Index: Operator.xml =================================================================== <?xml version="1.0"?> <document> <header> <title>JXForms: Calculator</title> <tab title="Back" href=".."/> </header> <body> <section> <title>Operator</title> <xf:form id="calc" xmlns:xf="http://apache.org/cocoon/jxforms/1.0"> <p> a = <xf:output ref="numberA"/> </p> <p> b = <xf:output ref="numberB"/> </p> <p> Enter operator<br/> <xf:select1 ref="operator"> <xf:item id="plus"> <xf:label>Plus</xf:label> <xf:value>plus</xf:value> </xf:item> <xf:item id="minus"> <xf:label>Minus</xf:label> <xf:value>minus</xf:value> </xf:item> <xf:item id="multiply"> <xf:label>Multiply</xf:label> <xf:value>multiply</xf:value> </xf:item> <xf:item id="divide"> <xf:label>Divide</xf:label> <xf:value>divide</xf:value> </xf:item> </xf:select1> </p> <p> <xf:submit id="prev" continuation="back" class="button"> <xf:label>Prev</xf:label> </xf:submit> <xf:submit id="next" continuation="forward" class="button"> <xf:label>Next</xf:label> </xf:submit> </p> </xf:form> </section> </body> </document> 1.1 cocoon-2.1/src/blocks/jxforms/samples/calc/Result.xml Index: Result.xml =================================================================== <?xml version="1.0"?> <document> <header> <title>JXForms: Calculator</title> <tab title="Back" href=".."/> </header> <body> <section> <title>Result</title> <xf:form id="calc" xmlns:xf="http://apache.org/cocoon/jxforms/1.0"> <p> a = <xf:output ref="numberA"/> </p> <p> b = <xf:output ref="numberB"/> </p> <p> operator = <xf:output ref="operator"/> </p> <p> result = <xf:output ref="result"/> </p> <p> <xf:submit id="prev" continuation="back" class="button"> <xf:label>Prev</xf:label> </xf:submit> <xf:submit id="next" continuation="forward" class="button"> <xf:label>Next</xf:label> </xf:submit> </p> </xf:form> </section> </body> </document> 1.1 cocoon-2.1/src/blocks/jxforms/samples/calc/calc.js Index: calc.js =================================================================== cocoon.load("resource://org/apache/cocoon/components/jxforms/flow/javascript/JXForm.js"); function calculator(form) { var model = { numberA: 0, numberB: 0, operator: "plus", result: 0 }; form.setModel(model); form.sendView("calc/NumberA.xml"); form.sendView("calc/NumberB.xml"); form.sendView("calc/Operator.xml"); switch (model.operator) { case "plus": model.result = Number(model.numberA) + Number(model.numberB); break; case "minus": model.result = model.numberA - model.numberB; break; case "multiply": model.result = model.numberA * model.numberB; break; case "divide": model.result = model.numberA / model.numberB; break; } form.sendView("calc/Result.xml"); calculator(form); // repeat (Note recursive tail call) } 1.1 cocoon-2.1/src/blocks/jxforms/samples/wizard/confirm.xml Index: confirm.xml =================================================================== <?xml version="1.0"?> <document xmlns:xf="http://apache.org/cocoon/jxforms/1.0"> <xf:form id="form-feedback" view="confirm"> <xf:label>Confirm Input</xf:label> <!-- from page1 --> <xf:output ref="firstName"> <xf:label>First Name</xf:label> </xf:output> <xf:output ref="lastName"> <xf:label>Last Name</xf:label> </xf:output> <xf:output ref="email"> <xf:label>Email</xf:label> </xf:output> <xf:output ref="age"> <xf:label>Age</xf:label> <xf:violations class="error"/> </xf:output> <xf:group ref="/"> <xf:label>Professional roles</xf:label> <xf:repeat nodeset="role"> <xf:output ref="."/> </xf:repeat> </xf:group> <xf:group ref="/"> <xf:label>Personal hobbies</xf:label> <xf:repeat nodeset="hobby"> <xf:output ref="."/> </xf:repeat> </xf:group> <xf:output ref="hidden"> <xf:label>Hidden attribute</xf:label> </xf:output> <!-- from page2 --> <xf:output ref="number"> <xf:label>Number of installations</xf:label> </xf:output> <xf:output ref="liveUrl"> <xf:label>Live URL</xf:label> </xf:output> <xf:output ref="publish"> <xf:label>Publish URL</xf:label> </xf:output> <!-- from page3 --> <xf:output ref="system/os"> <xf:label>OS</xf:label> </xf:output> <xf:output ref="system/processor"> <xf:label>Processor</xf:label> </xf:output> <xf:output ref="system/@ram"> <xf:label>RAM</xf:label> </xf:output> <xf:output ref="system/servletEngine"> <xf:label>Servlet Engine</xf:label> </xf:output> <xf:output ref="system/javaVersion"> <xf:label>Java Version</xf:label> </xf:output> <xf:group ref="/" id="favorites_group"> <xf:label>Favorite web sites</xf:label> <xf:repeat nodeset="favorite[position() <= 3]" id="favorites"> <xf:output ref="." class="info"> <xf:label>URL: </xf:label> </xf:output> </xf:repeat> </xf:group> <!-- submit --> <xf:submit id="prev" continuation="back" class="button"> <xf:label>Prev</xf:label> <xf:hint>Go to previous page</xf:hint> </xf:submit> <xf:submit id="next" continuation="forward" class="button"> <xf:label>Finish</xf:label> <xf:hint>Finish the wizard</xf:hint> </xf:submit> </xf:form> <xf:output ref="count" id="show_count" form="form-feedback" class="info"> <xf:label>Visits Count</xf:label> </xf:output> </document> 1.1 cocoon-2.1/src/blocks/jxforms/samples/wizard/deployment.xml Index: deployment.xml =================================================================== <?xml version="1.0"?> <document xmlns:xf="http://apache.org/cocoon/jxforms/1.0"> <xf:form id="form-feedback" view="deployment"> <xf:label>Cocoon Deployment Information</xf:label> <error> <xf:violations class="error"/> </error> <xf:input ref="/number"> <xf:label>Number of deployments</xf:label> <xf:violations class="error"/> </xf:input> <xf:input ref="/liveUrl"> <xf:label>Live URL</xf:label> <xf:help>You must enter a valid URL</xf:help> <xf:violations class="error"/> </xf:input> <xf:select1 ref="/publish" appearance="full"> <xf:label>Publish</xf:label> <xf:item> <xf:label>Yes</xf:label> <xf:value>true</xf:value> </xf:item> <xf:item> <xf:label>No</xf:label> <xf:value></xf:value> </xf:item> </xf:select1> <xf:group nodeset="" id="favorites_group"> <xf:label>Favorite web sites</xf:label> <!-- repeat is a very powerful iterator tag, because it iterates over a nodeset resulting from the 'nodeset' selector attribute. Very similar to xslt's for-each tag. In this case we iterate over the top three favorite web sites. --> <xf:repeat nodeset="favorite[position() <= 3]" id="favorites"> <xf:input ref="." class="info"> <xf:label>URL:</xf:label> </xf:input> </xf:repeat> </xf:group> <xf:submit id="prev" continuation="back" class="button"> <xf:label>Prev</xf:label> <xf:hint>Go to previous page</xf:hint> </xf:submit> <xf:submit id="next" continuation="forward" class="button"> <xf:label>Next</xf:label> <xf:hint>Go to next page</xf:hint> </xf:submit> </xf:form> <xf:output ref="count" id="show_count" form="form-feedback" class="info"> <xf:label>Visits Count</xf:label> </xf:output> </document> 1.1 cocoon-2.1/src/blocks/jxforms/samples/wizard/end.xml Index: end.xml =================================================================== <?xml version="1.0" ?> <document> <br/><br/><br/> <table align="center" width="50%" cellspacing="20"> <tr> <td align="center"> <h1> Congratulations, Wizard Complete! </h1> </td> </tr> <tr> <td align="center" class="info"> <code> Your feedback form was processed successfully. </code> </td> </tr> <tr> <td align="center"> <h3> <a href="../">Go to home page.</a> </h3> </td> </tr> </table> </document> 1.1 cocoon-2.1/src/blocks/jxforms/samples/wizard/feedbackWizard.js Index: feedbackWizard.js =================================================================== // Feedback Wizard Sample cocoon.load("resource://org/apache/cocoon/components/jxforms/flow/javascript/JXForm.js"); function feedbackWizard(form) { var 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", } } form.setModel(bean); form.sendView("wizard/userIdentity.xml", function(form) { var bean = form.getModel(); cocoon.log.info("I can also do validation in JavaScript"); cocoon.log.info("age = "+form.getValue("number(/age)")); cocoon.log.info("role = "+bean.role); if (bean.age > 40) { form.addViolation("/age", "Hey, you're too old"); } }); cocoon.log.info("handling user identity"); form.sendView("wizard/deployment.xml", function(form) { var bean = form.getModel(); cocoon.log.info("I can also do validation in JavaScript"); if (bean.publish) { form.addViolation("/publish", "Sorry, I won't let you publish"); } }); cocoon.log.info("handling deployment"); form.sendView("wizard/system.xml"); cocoon.log.info("handling system"); form.sendView("wizard/confirm.xml"); cocoon.log.info("handling confirm"); form.finish("wizard/end.xml"); cocoon.log.info("done"); } 1.1 cocoon-2.1/src/blocks/jxforms/samples/wizard/schematron.xml Index: schematron.xml =================================================================== <?xml version="1.0" ?> <!-- Validating Schematron schema for the JXForms example wizard Schematron Schema language home page: http://www.ascc.net/xml/schematron/ --> <schema ns="http://xml.apache.cocoon/jxforms" xmlns="http://www.ascc.net/xml/schematron"> <title>Schema for the JXForms example</title> <phase id="userIdentity"> <p>For user identity information.</p> <active pattern="user"/> </phase> <phase id="deployment"> <p>For deployment info page.</p> <active pattern="dep" /> </phase> <phase id="system"> <p>For system info page.</p> <active pattern="sys" /> </phase> <phase id="confirm"> <p>For final total validation and tracking some tricky problems.</p> <active pattern="user" /> <active pattern="dep" /> <active pattern="sys" /> </phase> <pattern name="User Info Validation Pattern" id="user"> <rule context="/firstName"> <assert test="string-length(.) > 3">First name <anametag/> <wrapper>should</wrapper> be at least 4 characters.</assert> <assert test="string-length(.) < 20">First name should be less than 20 characters.</assert> </rule> <rule context="/lastName"> <assert test="string-length(.) > 3">Last name should be at least 4 characters.</assert> <assert test="string-length(.) < 20">Last name should be less than 20 characters.</assert> </rule> <rule context="/email"> <assert test="contains( string(.),'@')">Email format is invalid.</assert> </rule> <rule context="/age"> <assert test="number() > 0 and number(.) < 200">Age should be a reasonably big positive number.</assert> </rule> </pattern> <pattern name="Deployment Information Validation Pattern" id="dep"> <rule context="/number"> <assert test="number() > 0">The number of deployments must be non-negative ( hopefully positive :-> ) .</assert> </rule> <rule context="/"> <!-- If the site is to be published, then verify the URL. Note: This assertion demonstrates the unique ability of Schematron to test document node dependencies. This is not possible to do with XML Schema and Relax NG. --> <assert test="not(string(publish) = 'true') or (starts-with(liveUrl, 'http://') and contains( string(liveUrl),'.') ) " >The URL of the published site is invalid.</assert> </rule> </pattern> <pattern name="System Information Validation Pattern" id="sys"> <rule context="/system/@ram"> <assert test="number() > 0">The RAM value should be a positive number, denoting the memory in MB (e.g. 128, 512, etc.).</assert> </rule> </pattern> </schema> 1.1 cocoon-2.1/src/blocks/jxforms/samples/wizard/start.xml Index: start.xml =================================================================== <?xml version="1.0" ?> <document> <br/><br/><br/> <table align="center" width="50%" cellspacing="20"> <tr> <td align="center"> <h1> Welcome ! </h1> </td> </tr> <tr> <td align="center" class="info"> <p> This wizard will collect feedback information for the <a href="http://xml.apache.org/cocoon/">Apache Cocoon</a> project. </p> <p> See <a href="overview.html">overview</a> documentation. </p> </td> </tr> <tr> <td align="center"> <h3> <a href="flow?cocoon-action-start=true"> Start! </a> </h3> </td> </tr> </table> </document> 1.1 cocoon-2.1/src/blocks/jxforms/samples/wizard/system.xml Index: system.xml =================================================================== <?xml version="1.0"?> <document xmlns:xf="http://apache.org/cocoon/jxforms/1.0"> <xf:form id="form-feedback" view="system"> <xf:label>System Information</xf:label> <error> <xf:violations class="error"/> </error> <xf:group ref="/system"> <xf:select1 ref="os" appearance="full"> <xf:label>OS</xf:label> <xf:item id="unix"> <xf:label>Unix/Linux</xf:label> <xf:value>Unix</xf:value> </xf:item> <xf:item id="mac"> <xf:label>Mac OS/X</xf:label> <xf:value>Mac OS/X</xf:value> </xf:item> <xf:item id="win"> <xf:label>Windows 95/98/NT/2000/XP</xf:label> <xf:value>Windows</xf:value> </xf:item> <xf:item id="other"> <xf:label>Other</xf:label> <xf:value>Other</xf:value> </xf:item> </xf:select1> <xf:select1 ref="processor"> <xf:label>Processor</xf:label> <xf:item> <xf:label>AMD/Athlon</xf:label> <xf:value>Athlon</xf:value> </xf:item> <xf:item> <xf:label>AMD/Duron</xf:label> <xf:value>Duron</xf:value> </xf:item> <xf:item> <xf:label>Pentium Celeron</xf:label> <xf:value>Celeron</xf:value> </xf:item> <xf:item> <xf:label>Pentium III</xf:label> <xf:value>p3</xf:value> </xf:item> <xf:item> <xf:label>Pentium IV</xf:label> <xf:value>p4</xf:value> </xf:item> <xf:item> <xf:label>Other</xf:label> <xf:value>other</xf:value> </xf:item> </xf:select1> <xf:input ref="@ram"> <xf:label>RAM</xf:label> <xf:violations class="error"/> </xf:input> <xf:select1 ref="servletEngine"> <xf:label>Servlet Engine</xf:label> <xf:item> <xf:label>Tomcat</xf:label> <xf:value>Tomcat</xf:value> </xf:item> <xf:item> <xf:label>Jetty</xf:label> <xf:value>Jetty</xf:value> </xf:item> <xf:item> <xf:label>Resin</xf:label> <xf:value>Resin</xf:value> </xf:item> <xf:item> <xf:label>Weblogic</xf:label> <xf:value>weblogic</xf:value> </xf:item> <xf:item> <xf:label>WebSphere</xf:label> <xf:value>WebSphere</xf:value> </xf:item> <xf:item> <xf:label>Other</xf:label> <xf:value>other</xf:value> </xf:item> </xf:select1> <xf:select1 ref="javaVersion"> <xf:label>Java Version</xf:label> <xf:item> <xf:label>1.1</xf:label> <xf:value>1.1</xf:value> </xf:item> <xf:item> <xf:label>1.2</xf:label> <xf:value>1.2</xf:value> </xf:item> <xf:item> <xf:label>1.3</xf:label> <xf:value>1.3</xf:value> </xf:item> <xf:item> <xf:label>1.4</xf:label> <xf:value>1.4</xf:value> </xf:item> <xf:item> <xf:label>Other</xf:label> <xf:value>Other</xf:value> </xf:item> </xf:select1> </xf:group> <xf:submit id="prev" continuation="back" class="button"> <xf:label>Prev</xf:label> <xf:hint>Go to previous page</xf:hint> </xf:submit> <xf:submit id="next" continuation="forward" class="button"> <xf:label>Next</xf:label> <xf:hint>Go to next page</xf:hint> </xf:submit> </xf:form> <xf:output ref="count" id="show_count" form="form-feedback" class="info"> <xf:label>Visits Count</xf:label> </xf:output> </document> 1.1 cocoon-2.1/src/blocks/jxforms/samples/wizard/userIdentity.xml Index: userIdentity.xml =================================================================== <?xml version="1.0"?> <document xmlns:xf="http://apache.org/cocoon/jxforms/1.0"> <xf:form id="form-feedback" view="userIdentity"> <xf:label>Personal Information</xf:label> <error> <xf:violations class="error"/> </error> <xf:input ref="/firstName"> <xf:label>First Name</xf:label> <xf:violations class="error"/> </xf:input> <xf:input ref="/lastName"> <xf:label>Last Name</xf:label> <xf:violations class="error"/> </xf:input> <xf:input ref="/email"> <xf:label>Email</xf:label> <xf:help>Please check this carefully</xf:help> <xf:violations class="error"/> </xf:input> <xf:input ref="/age"> <xf:label>Age</xf:label> <xf:violations class="error"/> </xf:input> <xf:select ref="/role" appearance="compact"> <xf:label>Professional roles</xf:label> <xf:help>Select one or more</xf:help> <xf:item> <xf:label>Geek</xf:label> <xf:value>Geek</xf:value> </xf:item> <xf:item> <xf:label>Hacker</xf:label> <xf:value>Hacker</xf:value> </xf:item> <xf:item> <xf:label>Student</xf:label> <xf:value>Student</xf:value> </xf:item> <xf:item> <xf:label>University Professor</xf:label> <xf:value>University Professor</xf:value> </xf:item> <xf:item> <xf:label>Software Developer</xf:label> <xf:value>Developer</xf:value> </xf:item> <xf:item> <xf:label>Technical Leader</xf:label> <xf:value>Tech Lead</xf:value> </xf:item> <xf:item> <xf:label>Development Manager</xf:label> <xf:value>Development Manager</xf:value> </xf:item> <xf:item> <xf:label>Executive</xf:label> <xf:value>Executive</xf:value> </xf:item> <xf:item> <xf:label>Heir of the Apache tribe</xf:label> <xf:value>Heir of the Apache tribe</xf:value> </xf:item> </xf:select> <xf:select ref="/hobby" appearance="full"> <xf:label>Hobbies</xf:label> <xf:itemset nodeset="allHobbies"> <xf:label ref="value"/> <xf:value ref="key"/> </xf:itemset> </xf:select> <xf:textarea ref="notes" style="width:8cm; height:3cm"> <xf:label>Additional Notes</xf:label> </xf:textarea> <!-- hidden model attribute --> <xf:hidden ref="hidden"> <xf:value>true</xf:value> </xf:hidden> <xf:submit id="next" phase="userIdentity" continuation="forward" class="button"> <xf:label>Next</xf:label> <xf:hint>Go to next page</xf:hint> </xf:submit> </xf:form> <xf:output ref="count" id="show_count" form="form-feedback" class="info"> <xf:label>Visits Count</xf:label> </xf:output> </document>