That's not the way to do this... Just use an action instead of a form submit and add an event handler in your form definition...
I added some samples of a complex application I built so you can check some stuff out if you like. Cheers, Robby ---------------- formdefinition ------------- <?xml version="1.0" encoding="UTF-8"?> <fd:form id="objectsearcherForm" xmlns:fd="http://apache.org/cocoon/forms/1.0#definition"> <fd:widgets> <fd:action id="refresh"> <fd:on-action> <javascript> var objectSearcher = event.getSource().getForm().getAttribute("objectSearcher"); objectSearcher.refresh(); </javascript> </fd:on-action> </fd:action> <fd:action id="reset"> <fd:on-action> <javascript> var objectSearcher = event.getSource().getForm().getAttribute("objectSearcher"); objectSearcher.reset(); </javascript> </fd:on-action> </fd:action> <fd:repeater id="properties"> <fd:widgets> <fd:booleanfield id="showField"> <fd:initial-value>false</fd:initial-value> </fd:booleanfield> <fd:field id="propertyKey" state="invisible"> <fd:datatype base="string"/> </fd:field> <fd:field id="propertyName" state="output"> <fd:datatype base="string"/> </fd:field> <fd:field id="datatype" state="output"> <fd:datatype base="string"/> </fd:field> <fd:union id="datatype-union" case="datatype"> <fd:widgets> <fd:group id="String"> <fd:widgets> <fd:field id="operator"> <fd:datatype base="string"/> <fd:selection-list> <fd:item value="-- operator --"/> <fd:item value="EQUALS"><fd:label>=</fd:label></fd:item> <fd:item value="CONTAINS"><fd:label>contains</fd:label></fd:item> <fd:item value="IS_NULL"><fd:label>is null</fd:label></fd:item> <fd:item value="IS_EMPTY"><fd:label>is empty</fd:label></fd:item> <fd:item value="IN"><fd:label>in</fd:label></fd:item> </fd:selection-list> <fd:on-value-changed> <javascript> var objectSearcher = event.getSource().getForm().getAttribute("objectSearcher"); objectSearcher.handleOperatorChangedEvent(event); </javascript> </fd:on-value-changed> </fd:field> <fd:union id="operator-union" case="operator"> <fd:widgets> <fd:group id="-- operator --"/> <fd:group id="CONTAINS"> <fd:widgets> <fd:field id="criterium1" required="true"> <fd:datatype base="string"/> </fd:field> </fd:widgets> </fd:group> <fd:group id="EQUALS"> <fd:widgets> <fd:action id="lookup"> <fd:on-action> <javascript> var objectSearcher = event.getSource().getForm().getAttribute("objectSearcher"); objectSearcher.handleLookupClickEvent(event); </javascript> </fd:on-action> </fd:action> <fd:field id="criterium1" required="true"> <fd:datatype base="string"/> </fd:field> </fd:widgets> </fd:group> <fd:group id="IS_NULL"/> <fd:group id="IS_EMPTY"/> <fd:group id="IN"> <fd:widgets> <fd:multivaluefield id="criteria"> <fd:datatype base="string"/> </fd:multivaluefield> </fd:widgets> </fd:group> </fd:widgets> </fd:union> </fd:widgets> </fd:group> <fd:group id="Integer"> <fd:widgets> <fd:field id="operator"> <fd:datatype base="string"/> <fd:selection-list> <fd:item value="-- operator --"/> <fd:item value="EQUALS"><fd:label>=</fd:label></fd:item> <fd:item value="IS_NULL"><fd:label>is null</fd:label></fd:item> <fd:item value="LT"><fd:label><</fd:label></fd:item> <fd:item value="LTE"><fd:label><=</fd:label></fd:item> <fd:item value="GT"><fd:label>></fd:label></fd:item> <fd:item value="GTE"><fd:label>>=</fd:label></fd:item> <fd:item value="BETWEEN"><fd:label>between</fd:label></fd:item> </fd:selection-list> <fd:on-value-changed> <javascript> var objectSearcher = event.getSource().getForm().getAttribute("objectSearcher"); objectSearcher.handleOperatorChangedEvent(event); </javascript> </fd:on-value-changed> </fd:field> <fd:union id="operator-union" case="operator"> <fd:widgets> <fd:group id="-- operator --"/> <fd:group id="EQUALS"> <fd:widgets> <fd:action id="lookup"> <fd:on-action> <javascript> var objectSearcher = event.getSource().getForm().getAttribute("objectSearcher"); objectSearcher.handleLookupClickEvent(event); </javascript> </fd:on-action> </fd:action> <fd:field id="criterium1" required="true"> <fd:datatype base="integer"/> </fd:field> </fd:widgets> </fd:group> <fd:group id="IS_NULL"/> <fd:group id="LT"> <fd:widgets> <fd:action id="lookup"> <fd:on-action> <javascript> var objectSearcher = event.getSource().getForm().getAttribute("objectSearcher"); objectSearcher.handleLookupClickEvent(event); </javascript> </fd:on-action> </fd:action> <fd:field id="criterium1" required="true"> <fd:datatype base="integer"/> </fd:field> </fd:widgets> </fd:group> <fd:group id="LTE"> <fd:widgets> <fd:action id="lookup"> <fd:on-action> <javascript> var objectSearcher = event.getSource().getForm().getAttribute("objectSearcher"); objectSearcher.handleLookupClickEvent(event); </javascript> </fd:on-action> </fd:action> <fd:field id="criterium1" required="true"> <fd:datatype base="integer"/> </fd:field> </fd:widgets> </fd:group> <fd:group id="GT"> <fd:widgets> <fd:action id="lookup"> <fd:on-action> <javascript> var objectSearcher = event.getSource().getForm().getAttribute("objectSearcher"); objectSearcher.handleLookupClickEvent(event); </javascript> </fd:on-action> </fd:action> <fd:field id="criterium1" required="true"> <fd:datatype base="integer"/> </fd:field> </fd:widgets> </fd:group> <fd:group id="GTE"> <fd:widgets> <fd:action id="lookup"> <fd:on-action> <javascript> var objectSearcher = event.getSource().getForm().getAttribute("objectSearcher"); objectSearcher.handleLookupClickEvent(event); </javascript> </fd:on-action> </fd:action> <fd:field id="criterium1" required="true"> <fd:datatype base="integer"/> </fd:field> </fd:widgets> </fd:group> <fd:group id="BETWEEN"> <fd:widgets> <fd:field id="criterium1" required="true"> <fd:datatype base="integer"/> </fd:field> <fd:field id="criterium2" required="true"> <fd:datatype base="integer"/> </fd:field> </fd:widgets> </fd:group> </fd:widgets> </fd:union> </fd:widgets> </fd:group> <fd:group id="Double"> <fd:widgets> <fd:field id="operator"> <fd:datatype base="string"/> <fd:selection-list> <fd:item value="-- operator --"/> <fd:item value="EQUALS"><fd:label>=</fd:label></fd:item> <fd:item value="IS_NULL"><fd:label>is null</fd:label></fd:item> <fd:item value="LT"><fd:label><</fd:label></fd:item> <fd:item value="LTE"><fd:label><=</fd:label></fd:item> <fd:item value="GT"><fd:label>></fd:label></fd:item> <fd:item value="GTE"><fd:label>>=</fd:label></fd:item> <fd:item value="BETWEEN"><fd:label>between</fd:label></fd:item> </fd:selection-list> <fd:on-value-changed> <javascript> var objectSearcher = event.getSource().getForm().getAttribute("objectSearcher"); objectSearcher.handleOperatorChangedEvent(event); </javascript> </fd:on-value-changed> </fd:field> <fd:union id="operator-union" case="operator"> <fd:widgets> <fd:group id="-- operator --"/> <fd:group id="EQUALS"> <fd:widgets> <fd:action id="lookup"> <fd:on-action> <javascript> var objectSearcher = event.getSource().getForm().getAttribute("objectSearcher"); objectSearcher.handleLookupClickEvent(event); </javascript> </fd:on-action> </fd:action> <fd:field id="criterium1" required="true"> <fd:datatype base="double"/> </fd:field> </fd:widgets> </fd:group> <fd:group id="IS_NULL"/> <fd:group id="LT"> <fd:widgets> <fd:action id="lookup"> <fd:on-action> <javascript> var objectSearcher = event.getSource().getForm().getAttribute("objectSearcher"); objectSearcher.handleLookupClickEvent(event); </javascript> </fd:on-action> </fd:action> <fd:field id="criterium1" required="true"> <fd:datatype base="double"/> </fd:field> </fd:widgets> </fd:group> <fd:group id="LTE"> <fd:widgets> <fd:action id="lookup"> <fd:on-action> <javascript> var objectSearcher = event.getSource().getForm().getAttribute("objectSearcher"); objectSearcher.handleLookupClickEvent(event); </javascript> </fd:on-action> </fd:action> <fd:field id="criterium1" required="true"> <fd:datatype base="double"/> </fd:field> </fd:widgets> </fd:group> <fd:group id="GT"> <fd:widgets> <fd:action id="lookup"> <fd:on-action> <javascript> var objectSearcher = event.getSource().getForm().getAttribute("objectSearcher"); objectSearcher.handleLookupClickEvent(event); </javascript> </fd:on-action> </fd:action> <fd:field id="criterium1" required="true"> <fd:datatype base="double"/> </fd:field> </fd:widgets> </fd:group> <fd:group id="GTE"> <fd:widgets> <fd:action id="lookup"> <fd:on-action> <javascript> var objectSearcher = event.getSource().getForm().getAttribute("objectSearcher"); objectSearcher.handleLookupClickEvent(event); </javascript> </fd:on-action> </fd:action> <fd:field id="criterium1" required="true"> <fd:datatype base="double"/> </fd:field> </fd:widgets> </fd:group> <fd:group id="BETWEEN"> <fd:widgets> <fd:field id="criterium1" required="true"> <fd:datatype base="double"/> </fd:field> <fd:field id="criterium2" required="true"> <fd:datatype base="double"/> </fd:field> </fd:widgets> </fd:group> </fd:widgets> </fd:union> </fd:widgets> </fd:group> </fd:widgets> </fd:union> </fd:widgets> </fd:repeater> <fd:field id="sortBy"> <fd:datatype base="string"/> <fd:on-value-changed> <javascript> var objectSearcher = event.getSource().getForm().getAttribute("objectSearcher"); objectSearcher.handleSortByValueChangedEvent(event); </javascript> </fd:on-value-changed> </fd:field> <fd:action id="first"> <fd:on-action> <javascript> var objectSearcher = event.getSource().getForm().getAttribute("objectSearcher"); objectSearcher.firstPage(); </javascript> </fd:on-action> </fd:action> <fd:action id="previous"> <fd:on-action> <javascript> var objectSearcher = event.getSource().getForm().getAttribute("objectSearcher"); objectSearcher.previousPage(); </javascript> </fd:on-action> </fd:action> <fd:action id="next"> <fd:on-action> <javascript> var objectSearcher = event.getSource().getForm().getAttribute("objectSearcher"); objectSearcher.nextPage(); </javascript> </fd:on-action> </fd:action> <fd:action id="last"> <fd:on-action> <javascript> var objectSearcher = event.getSource().getForm().getAttribute("objectSearcher"); objectSearcher.lastPage(); </javascript> </fd:on-action> </fd:action> <fd:field id="showResults"> <fd:datatype base="string"/> <fd:initial-value>false</fd:initial-value> <fd:selection-list> <fd:item value="true"><fd:label>true</fd:label></fd:item> <fd:item value="false"><fd:label>false</fd:label></fd:item> </fd:selection-list> </fd:field> </fd:widgets> </fd:form> ---------------- formtemplate macro------------- <jx:macro name="objectsearcher-widget"> <ft:form action="#{$cocoon/continuation/id}.continue" method="POST" > <table> <tr> <td style="width: 4%; border-bottom: 1px solid black; border-top: 1px solid black;"> <div title="Clicking this button indexes any new or changed objects again."> <ft:widget id="refresh"> <fi:styling type="image" src="shared/resource/external/icons/Blue/32/refresh.png"/> </ft:widget> </div> </td> <td style="width: 4%; border-bottom: 1px solid black; border-top: 1px solid black;"> <div title="Clicking this button clears the cached objects and indexes all objects again. Be aware that this is a timeconsuming operation."> <ft:widget id="reset"> <fi:styling type="image" src="shared/resource/external/icons/Blue/32/Recycle.png"/> </ft:widget> </div> </td> <td style="width: 88%; border-bottom: 1px solid black; border-top: 1px solid black;"> Objects last indexed at ${lastProcessedDate} </td> <td style="width: 4%; border-bottom: 1px solid black; border-top: 1px solid black;"> <jx:if test="${hasCorruptObjects}"> <a href="${corruptObjectsViewerURI}" target="_blank" style="color: white;" title="View corrupt objects"> <img src="shared/resource/external/icons/yellow/32/about.png"/> </a> </jx:if> </td> </tr> </table> <ft:repeater id="properties"> <table> <thead> <tr class="subheader"> <th style="width: 5%;">Show</th> <th style="width: 1%;"/> <!-- for key --> <th style="width: 30%;">Property</th> <th style="width: 15%;">Operator</th> <th style="width: 40%;">Value(s)</th> </tr> </thead> <tbody> <ft:repeater-rows> <tr> <td> <ft:widget id="showField"/> </td> <td> <ft:widget id="propertyKey"/> </td> <td> <ft:widget id="propertyName"/> </td> <ft:union id="datatype-union"> <ft:case id="String"> <ft:group id="String"> <td> <ft:widget id="operator"> <fi:styling list-type="dropdown" submit-on-change="true"/> </ft:widget> </td> <td style="1px solid blue; padding: 0px;"> <ft:union id="operator-union"> <ft:case id="-- operator --"> <ft:group id="-- operator --"/> </ft:case> <ft:case id="CONTAINS"> <ft:group id="CONTAINS"> <ft:widget id="criterium1"/> </ft:group> </ft:case> <ft:case id="EQUALS"> <ft:group id="EQUALS"> <ft:widget id="lookup"> <fi:styling type="image" src="shared/resource/external/icons/Blue/24/zoom.png"/> </ft:widget> <ft:widget id="criterium1"/> </ft:group> </ft:case> <ft:case id="IS_NULL"> <ft:group id="IS_NULL"/> </ft:case> <ft:case id="IS_EMPTY"> <ft:group id="IS_EMPTY"/> </ft:case> <ft:case id="IN"> <ft:group id="IN"> <ft:widget id="criteria"> <fi:styling list-type="double-listbox"> <fi:available-label>Available</fi:available-label> <fi:selected-label>Selected</fi:selected-label> </fi:styling> </ft:widget> </ft:group> </ft:case> </ft:union> </td> </ft:group> </ft:case> <ft:case id="Integer"> <ft:group id="Integer"> <td> <ft:widget id="operator"> <fi:styling list-type="dropdown" submit-on-change="true"/> </ft:widget> </td> <td> <ft:union id="operator-union"> <ft:case id="-- operator --"> <ft:group id="-- operator --"/> </ft:case> <ft:case id="EQUALS"> <ft:group id="EQUALS"> <ft:widget id="lookup"> <fi:styling type="image" src="shared/resource/external/icons/Blue/24/zoom.png"/> </ft:widget> <ft:widget id="criterium1"/> </ft:group> </ft:case> <ft:case id="IS_NULL"> <ft:group id="IS_NULL"/> </ft:case> <ft:case id="LT"> <ft:group id="LT"> <ft:widget id="lookup"> <fi:styling type="image" src="shared/resource/external/icons/Blue/24/zoom.png"/> </ft:widget> <ft:widget id="criterium1"/> </ft:group> </ft:case> <ft:case id="LTE"> <ft:group id="LTE"> <ft:widget id="lookup"> <fi:styling type="image" src="shared/resource/external/icons/Blue/24/zoom.png"/> </ft:widget> <ft:widget id="criterium1"/> </ft:group> </ft:case> <ft:case id="GT"> <ft:group id="GT"> <ft:widget id="lookup"> <fi:styling type="image" src="shared/resource/external/icons/Blue/24/zoom.png"/> </ft:widget> <ft:widget id="criterium1"/> </ft:group> </ft:case> <ft:case id="GTE"> <ft:group id="GTE"> <ft:widget id="lookup"> <fi:styling type="image" src="shared/resource/external/icons/Blue/24/zoom.png"/> </ft:widget> <ft:widget id="criterium1"/> </ft:group> </ft:case> <ft:case id="BETWEEN"> <ft:group id="BETWEEN"> <ft:widget id="criterium1"/> and <ft:widget id="criterium2"/> </ft:group> </ft:case> </ft:union> </td> </ft:group> </ft:case> <ft:case id="Double"> <ft:group id="Double"> <td> <ft:widget id="operator"> <fi:styling list-type="dropdown" submit-on-change="true"/> </ft:widget> </td> <td> <ft:union id="operator-union"> <ft:case id="-- operator --"> <ft:group id="-- operator --"/> </ft:case> <ft:case id="EQUALS"> <ft:group id="EQUALS"> <ft:widget id="lookup"> <fi:styling type="image" src="shared/resource/external/icons/Blue/24/zoom.png"/> </ft:widget> <ft:widget id="criterium1"/> </ft:group> </ft:case> <ft:case id="IS_NULL"> <ft:group id="IS_NULL"/> </ft:case> <ft:case id="LT"> <ft:group id="LT"> <ft:widget id="lookup"> <fi:styling type="image" src="shared/resource/external/icons/Blue/24/zoom.png"/> </ft:widget> <ft:widget id="criterium1"/> </ft:group> </ft:case> <ft:case id="LTE"> <ft:group id="LTE"> <ft:widget id="lookup"> <fi:styling type="image" src="shared/resource/external/icons/Blue/24/zoom.png"/> </ft:widget> <ft:widget id="criterium1"/> </ft:group> </ft:case> <ft:case id="GT"> <ft:group id="GT"> <ft:widget id="lookup"> <fi:styling type="image" src="shared/resource/external/icons/Blue/24/zoom.png"/> </ft:widget> <ft:widget id="criterium1"/> </ft:group> </ft:case> <ft:case id="GTE"> <ft:group id="GTE"> <ft:widget id="lookup"> <fi:styling type="image" src="shared/resource/external/icons/Blue/24/zoom.png"/> </ft:widget> <ft:widget id="criterium1"/> </ft:group> </ft:case> <ft:case id="BETWEEN"> <ft:group id="BETWEEN"> <ft:widget id="criterium1"/> and <ft:widget id="criterium2"/> </ft:group> </ft:case> </ft:union> </td> </ft:group> </ft:case> </ft:union> </tr> </ft:repeater-rows> </tbody> </table> </ft:repeater> <br/> <input type="submit" value="Search"/> <div style="visibility: hidden;"> <ft:widget id="showResults"/> </div> <jx:if test="${datatable != null}"> <div id="panel1"> <div class="hd"> <span> results package selector SPIDER </span> </div> <div class="bd"> <div> ${datatable.getResultSet().size()} result(s) found for Query: </div> <div style="white-space: normal; width: 100%; font-weigh: bold;"> ${queryString} </div> <table> <tr> <td> Sort By <ft:widget id="sortBy"> <fi:styling list-type="dropdown" submit-on-change="true"/> </ft:widget> </td> <td> <ft:widget id="first"> <fi:styling type="image" src="shared/resource/external/icons/Blue/24/Backward_01.png"/> </ft:widget> <ft:widget id="previous"> <fi:styling type="image" src="shared/resource/external/icons/Blue/24/Backward.png"/> </ft:widget> <ft:widget id="next"> <fi:styling type="image" src="shared/resource/external/icons/Blue/24/Forward.png"/> </ft:widget> <ft:widget id="last"> <fi:styling type="image" src="shared/resource/external/icons/Blue/24/Forward_01.png"/> </ft:widget> </td> <td> Page ${datatable.getPaginator().getCurrentPageIndex()} of ${datatable.getPaginator().getPageCount()} </td> </tr> </table> <table> <thead> <tr class="subheader"> <jx:eval select="${tags.customheadercells}"/> <jx:forEach var="pd" items="${datatable.getPropertyDefinitions()}"> <jx:if test="${!pd.getKey().equals('Id')}" > <th>${pd.getName()}</th> </jx:if> </jx:forEach> </tr> </thead> <tbody> <jx:forEach var="object" items="${datatable.getPaginator().getCurrentPage()}"> <tr> <jx:eval select="${tags.custombodycells}"/> <jx:forEach var="pd" items="${datatable.getPropertyDefinitions()}" varStatus="status"> <jx:set var="color"> <jx:choose> <jx:when test="${status.index % 2 == 0}">background-color:white;</jx:when> <jx:otherwise>background-color: #F1F1F1;</jx:otherwise> </jx:choose> </jx:set> <jx:if test="${!pd.getKey().equals('Id')}" > <td> <jx:attribute name="style">${color}</jx:attribute> ${object.getProperty(pd.getKey()).getValue()} </td> </jx:if> </jx:forEach> </tr> </jx:forEach> </tbody> </table> </div> <div class="ft"></div> </div> </jx:if> </ft:form> </jx:macro> ---------------- flowscript ------------- importClass(Packages.org.apache.cocoon.forms.formmodel.WidgetState); /*************************************************************************************** GENERIC OBJECT SEARCHER ***************************************************************************************/ function ObjectSearcher(objectSelector, objectSearcher, view, corruptObjectsViewerURI) { this.objectSelector = objectSelector; this.objectSearcher = objectSearcher; this.corruptObjectsViewerURI = corruptObjectsViewerURI; this.view = view; this.initialize(); } ObjectSearcher.prototype.initialize = function() { cocoon.load("servlet:forms:/resource/internal/flow/javascript/Form.js"); this.form = new Form("cocoon://formdefinition"); this.wForm = this.form.form; this.wProperties = this.wForm.lookupWidget("properties"); this.form.setAttribute("objectSearcher", this); this.objectSearcher.initialize(this.wForm); this.datatable = null; var lastProcessedDate = this.objectSelector.getLastProcessedDate(); var queryString = null; var datatable = null; var hasCorruptObjects = this.objectSelector.getCorruptObjects().size() > 0; this.viewData = ViewData(lastProcessedDate, queryString, null, hasCorruptObjects, this.corruptObjectsViewerURI); while(true) { this.showForm(this.viewData); this.objectSearcher.search(); // var csv = this.objectSearcher.getResultsToCSV(); // print(csv); this.wForm.lookupWidget("showResults").setValue("true"); lastProcessedDate = this.objectSelector.getLastProcessedDate(); queryString = this.objectSearcher.getQueryString(); datatable = this.objectSearcher.getDataTable(); this.viewData = ViewData(lastProcessedDate, queryString, datatable, hasCorruptObjects, this.corruptObjectsViewerURI); } } ObjectSearcher.prototype.showForm = function(viewData) { this.form.showForm(this.view, viewData); } ObjectSearcher.prototype.handleLookupClickEvent = function(event) { this.wForm.lookupWidget("showResults").setValue("false"); this.objectSearcher.handleLookupClickedEvent(event); } ObjectSearcher.prototype.handleOperatorChangedEvent = function(event) { this.wForm.lookupWidget("showResults").setValue("false"); this.objectSearcher.handleOperatorChangedEvent(event); } ObjectSearcher.prototype.handleSortByValueChangedEvent = function(event) { this.objectSearcher.handleSortByValueChangedEvent(event); } ObjectSearcher.prototype.refresh = function() { this.objectSelector.refresh(); } ObjectSearcher.prototype.reset = function() { this.objectSelector.reset(); } ObjectSearcher.prototype.firstPage = function() { this.objectSearcher.getDataTable().getPaginator().first(); } ObjectSearcher.prototype.previousPage = function() { this.objectSearcher.getDataTable().getPaginator().previous(); } ObjectSearcher.prototype.nextPage = function() { this.objectSearcher.getDataTable().getPaginator().next(); } ObjectSearcher.prototype.lastPage = function() { this.objectSearcher.getDataTable().getPaginator().last(); } /*************************************************************************************** VIEW DATA ***************************************************************************************/ function ViewData(lastProcessedDate, queryString, datatable, hasCorruptObjects, corruptObjectsViewerURI) { var data = {}; data.lastProcessedDate = lastProcessedDate; data.queryString = queryString; data.datatable = datatable; data.hasCorruptObjects = hasCorruptObjects; data.corruptObjectsViewerURI = corruptObjectsViewerURI; return data; } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
