You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by mu...@apache.org on 2007/04/28 18:59:03 UTC
svn commit: r533389 [1/3] - in /struts/struts2/trunk/plugins/dojo/src:
main/java/org/apache/struts2/dojo/components/
main/java/org/apache/struts2/dojo/views/
main/java/org/apache/struts2/dojo/views/freemarker/tags/
main/java/org/apache/struts2/dojo/vie...
Author: musachy
Date: Sat Apr 28 09:59:01 2007
New Revision: 533389
URL: http://svn.apache.org/viewvc?view=rev&rev=533389
Log:
WW-1897 Create JSONValidationInterceptor
* Add 'validate' attribute to submit,anchor and bind tags for ajax validation
* Add 'ajaxAfterValidation' attribute to submit,anchor and bind tags to make an ajax request if validation succeeds (false by default)
WW-1900 Clean up Dojo plugin
* Rename AbstractRemoteCallUIBean
* Drop 'form' tag
Added:
struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/AbstractRemoteBean.java
- copied, changed from r531046, struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/AbstractRemoteCallUIBean.java
struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/AbstractValidateBean.java
struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/RemoteBean.java
- copied, changed from r531046, struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/RemoteUICallBean.java
struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/jsp/ui/AbstractRemoteTag.java
- copied, changed from r531046, struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/jsp/ui/AbstractRemoteCallUITag.java
struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/jsp/ui/AbstractValidateTag.java
Removed:
struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/AbstractRemoteCallUIBean.java
struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Form.java
struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/RemoteUICallBean.java
struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/freemarker/tags/FormModel.java
struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/jsp/ui/AbstractRemoteCallUITag.java
struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/jsp/ui/FormTag.java
struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/velocity/components/FormDirective.java
struts/struts2/trunk/plugins/dojo/src/main/resources/template/ajax/form-close.ftl
struts/struts2/trunk/plugins/dojo/src/main/resources/template/ajax/form.ftl
struts/struts2/trunk/plugins/dojo/src/main/resources/template/ajax/validation.js
Modified:
struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Anchor.java
struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Bind.java
struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Div.java
struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Submit.java
struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/DojoTagLibrary.java
struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/freemarker/tags/DojoModels.java
struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/jsp/ui/AnchorTag.java
struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/jsp/ui/BindTag.java
struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/jsp/ui/DivTag.java
struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/jsp/ui/SubmitTag.java
struts/struts2/trunk/plugins/dojo/src/main/resources/org/apache/struts2/static/dojo/struts/widget/Bind.js
struts/struts2/trunk/plugins/dojo/src/main/resources/org/apache/struts2/static/dojo/struts_dojo.js
struts/struts2/trunk/plugins/dojo/src/main/resources/org/apache/struts2/static/dojo/struts_dojo.js.uncompressed.js
struts/struts2/trunk/plugins/dojo/src/main/resources/template/ajax/a.ftl
struts/struts2/trunk/plugins/dojo/src/main/resources/template/ajax/bind.ftl
struts/struts2/trunk/plugins/dojo/src/main/resources/template/ajax/head.ftl
struts/struts2/trunk/plugins/dojo/src/main/resources/template/ajax/submit.ftl
struts/struts2/trunk/plugins/dojo/src/test/java/org/apache/struts2/dojo/views/jsp/ui/AnchorTest.java
struts/struts2/trunk/plugins/dojo/src/test/java/org/apache/struts2/dojo/views/jsp/ui/BindTest.java
struts/struts2/trunk/plugins/dojo/src/test/java/org/apache/struts2/dojo/views/jsp/ui/SubmitAjaxTest.java
struts/struts2/trunk/plugins/dojo/src/test/resources/org/apache/struts2/dojo/views/jsp/ui/Bind-1.txt
struts/struts2/trunk/plugins/dojo/src/test/resources/org/apache/struts2/dojo/views/jsp/ui/HeadTagTest-1.txt
struts/struts2/trunk/plugins/dojo/src/test/resources/org/apache/struts2/dojo/views/jsp/ui/HeadTagTest-2.txt
struts/struts2/trunk/plugins/dojo/src/test/resources/org/apache/struts2/dojo/views/jsp/ui/href-1.txt
struts/struts2/trunk/plugins/dojo/src/test/resources/org/apache/struts2/dojo/views/jsp/ui/submit-ajax-1.txt
struts/struts2/trunk/plugins/dojo/src/test/resources/org/apache/struts2/dojo/views/jsp/ui/submit-ajax-3.txt
Copied: struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/AbstractRemoteBean.java (from r531046, struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/AbstractRemoteCallUIBean.java)
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/AbstractRemoteBean.java?view=diff&rev=533389&p1=struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/AbstractRemoteCallUIBean.java&r1=531046&p2=struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/AbstractRemoteBean.java&r2=533389
==============================================================================
--- struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/AbstractRemoteCallUIBean.java (original)
+++ struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/AbstractRemoteBean.java Sat Apr 28 09:59:01 2007
@@ -30,7 +30,7 @@
* AbstractRemoteCallUIBean is superclass for all components dealing with remote
* calls.
*/
-public abstract class AbstractRemoteCallUIBean extends ClosingUIBean implements RemoteUICallBean {
+public abstract class AbstractRemoteBean extends ClosingUIBean implements RemoteBean {
protected String href;
protected String errorText;
@@ -50,7 +50,7 @@
protected String highlightColor;
protected String highlightDuration;
- public AbstractRemoteCallUIBean(ValueStack stack, HttpServletRequest request,
+ public AbstractRemoteBean(ValueStack stack, HttpServletRequest request,
HttpServletResponse response) {
super(stack, request, response);
}
Added: struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/AbstractValidateBean.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/AbstractValidateBean.java?view=auto&rev=533389
==============================================================================
--- struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/AbstractValidateBean.java (added)
+++ struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/AbstractValidateBean.java Sat Apr 28 09:59:01 2007
@@ -0,0 +1,63 @@
+/*
+ * $Id$
+ *
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.struts2.dojo.components;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.struts2.components.Form;
+import org.apache.struts2.views.annotations.StrutsTagAttribute;
+
+import com.opensymphony.xwork2.util.ValueStack;
+
+/**
+ * Base class for tags that perform AJAX validation
+ */
+public abstract class AbstractValidateBean extends AbstractRemoteBean {
+ protected String validate;
+ protected String ajaxAfterValidation;
+
+ public AbstractValidateBean(ValueStack stack, HttpServletRequest request, HttpServletResponse response) {
+ super(stack, request, response);
+ }
+
+ public void evaluateExtraParams() {
+ super.evaluateExtraParams();
+
+ if (validate != null)
+ addParameter("validate", findValue(validate, Boolean.class));
+ if (ajaxAfterValidation != null)
+ addParameter("ajaxAfterValidation", findValue(ajaxAfterValidation, Boolean.class));
+
+ Form form = (Form) findAncestor(Form.class);
+ if (form != null)
+ addParameter("parentTheme", form.getTheme());
+ }
+
+ @StrutsTagAttribute(description = "Perform Ajax calidation. 'ajaxValidation' interceptor must be applied to action", type="Boolean",
+ defaultValue = "false")
+ public void setValidate(String validate) {
+ this.validate = validate;
+ }
+
+ @StrutsTagAttribute(description = "Make an asynchronous request if validation succeeds. Only valid is 'validate' is 'true'", type="Boolean",
+ defaultValue = "false")
+ public void setAjaxAfterValidation(String ajaxAfterValidation) {
+ this.ajaxAfterValidation = ajaxAfterValidation;
+ }
+}
\ No newline at end of file
Modified: struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Anchor.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Anchor.java?view=diff&rev=533389&r1=533388&r2=533389
==============================================================================
--- struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Anchor.java (original)
+++ struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Anchor.java Sat Apr 28 09:59:01 2007
@@ -23,6 +23,7 @@
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import org.apache.struts2.components.Form;
import org.apache.struts2.views.annotations.StrutsTag;
import org.apache.struts2.views.annotations.StrutsTagAttribute;
import org.apache.struts2.views.annotations.StrutsTagSkipInheritance;
@@ -90,7 +91,7 @@
*/
@StrutsTag(name="a", tldTagClass="org.apache.struts2.dojo.views.jsp.ui.AnchorTag", description="Renders an HTML anchor element that when clicked calls a URL via remote XMLHttpRequest and updates " +
"its targets content")
-public class Anchor extends AbstractRemoteCallUIBean {
+public class Anchor extends AbstractValidateBean {
public static final String OPEN_TEMPLATE = "a";
public static final String TEMPLATE = "a-close";
public static final String COMPONENT_NAME = Anchor.class.getName();
@@ -112,7 +113,7 @@
public void evaluateExtraParams() {
super.evaluateExtraParams();
- if(targets != null)
+ if (targets != null)
addParameter("targets", findString(targets));
}
Modified: struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Bind.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Bind.java?view=diff&rev=533389&r1=533388&r2=533389
==============================================================================
--- struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Bind.java (original)
+++ struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Bind.java Sat Apr 28 09:59:01 2007
@@ -55,7 +55,7 @@
*/
@StrutsTag(name="bind", tldTagClass="org.apache.struts2.dojo.views.jsp.ui.BindTag", description="Attach event listeners to elements to make AJAX calls")
@StrutsTagSkipInheritance
-public class Bind extends AbstractRemoteCallUIBean {
+public class Bind extends AbstractValidateBean {
public static final String TEMPLATE = "bind-close";
public static final String OPEN_TEMPLATE = "bind";
@@ -78,11 +78,11 @@
public void evaluateExtraParams() {
super.evaluateExtraParams();
- if(targets != null)
+ if (targets != null)
addParameter("targets", findString(targets));
- if(sources != null)
+ if (sources != null)
addParameter("sources", findString(sources));
- if(events != null)
+ if (events != null)
addParameter("events", findString(events));
}
@@ -112,6 +112,8 @@
return "ajax";
}
+ //these attributes are overwritten here just for the TLD generation
+
@StrutsTagAttribute(description="Topic that will trigger the remote call")
public void setListenTopics(String listenTopics) {
this.listenTopics = listenTopics;
@@ -220,5 +222,17 @@
defaultValue = "2000", type="Integer")
public void setHighlightDuration(String highlightDuration) {
this.highlightDuration = highlightDuration;
+ }
+
+ @StrutsTagAttribute(description = "Perform Ajax calidation. 'ajaxValidation' interceptor must be applied to action", type="Boolean",
+ defaultValue = "false")
+ public void setValidate(String validate) {
+ this.validate = validate;
+ }
+
+ @StrutsTagAttribute(description = "Make an asynchronous request if validation succeeds. Only valid is 'validate' is 'true'", type="Boolean",
+ defaultValue = "false")
+ public void setAjaxAfterValidation(String ajaxAfterValidation) {
+ this.ajaxAfterValidation = ajaxAfterValidation;
}
}
Modified: struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Div.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Div.java?view=diff&rev=533389&r1=533388&r2=533389
==============================================================================
--- struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Div.java (original)
+++ struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Div.java Sat Apr 28 09:59:01 2007
@@ -59,7 +59,7 @@
*
*/
@StrutsTag(name="div", tldTagClass="org.apache.struts2.dojo.views.jsp.ui.DivTag", description="Render HTML div providing content from remote call via AJAX")
-public class Div extends AbstractRemoteCallUIBean {
+public class Div extends AbstractRemoteBean {
public static final String TEMPLATE = "div";
public static final String TEMPLATE_CLOSE = "div-close";
Copied: struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/RemoteBean.java (from r531046, struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/RemoteUICallBean.java)
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/RemoteBean.java?view=diff&rev=533389&p1=struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/RemoteUICallBean.java&r1=531046&p2=struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/RemoteBean.java&r2=533389
==============================================================================
--- struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/RemoteUICallBean.java (original)
+++ struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/RemoteBean.java Sat Apr 28 09:59:01 2007
@@ -21,7 +21,7 @@
package org.apache.struts2.dojo.components;
-public interface RemoteUICallBean {
+public interface RemoteBean {
void setListenTopics(String topics);
Modified: struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Submit.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Submit.java?view=diff&rev=533389&r1=533388&r2=533389
==============================================================================
--- struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Submit.java (original)
+++ struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Submit.java Sat Apr 28 09:59:01 2007
@@ -27,6 +27,7 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.struts2.components.Form;
import org.apache.struts2.components.FormButton;
import org.apache.struts2.views.annotations.StrutsTag;
import org.apache.struts2.views.annotations.StrutsTagAttribute;
@@ -93,7 +94,7 @@
*
*/
@StrutsTag(name="submit", tldTagClass="org.apache.struts2.dojo.views.jsp.ui.SubmitTag", description="Render a submit button")
-public class Submit extends FormButton implements RemoteUICallBean {
+public class Submit extends FormButton implements RemoteBean {
private static final Log LOG = LogFactory.getLog(Submit.class);
@@ -118,7 +119,9 @@
protected String errorNotifyTopics;
protected String highlightColor;
protected String highlightDuration;
-
+ protected String validate;
+ protected String ajaxAfterValidation;
+
public Submit(ValueStack stack, HttpServletRequest request, HttpServletResponse response) {
super(stack, request, response);
}
@@ -180,6 +183,19 @@
addParameter("highlightColor", findString(highlightColor));
if (highlightDuration != null)
addParameter("highlightDuration", findString(highlightDuration));
+
+ Boolean validateValue = false;
+ if (validate != null) {
+ validateValue = (Boolean) findValue(validate, Boolean.class);
+ addParameter("validate", validateValue);
+ }
+
+ Form form = (Form) findAncestor(Form.class);
+ if (form != null)
+ addParameter("parentTheme", form.getTheme());
+
+ if (ajaxAfterValidation != null)
+ addParameter("ajaxAfterValidation", findValue(ajaxAfterValidation, Boolean.class));
}
@Override
@@ -352,5 +368,17 @@
defaultValue = "1000")
public void setHighlightDuration(String highlightDuration) {
this.highlightDuration = highlightDuration;
+ }
+
+ @StrutsTagAttribute(description = "Perform Ajax calidation. 'ajaxValidation' interceptor must be applied to action", type="Boolean",
+ defaultValue = "false")
+ public void setValidate(String validate) {
+ this.validate = validate;
+ }
+
+ @StrutsTagAttribute(description = "Make an asynchronous request if validation succeeds. Only valid is 'validate' is 'true'", type="Boolean",
+ defaultValue = "false")
+ public void setAjaxAfterValidation(String ajaxAfterValidation) {
+ this.ajaxAfterValidation = ajaxAfterValidation;
}
}
Modified: struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/DojoTagLibrary.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/DojoTagLibrary.java?view=diff&rev=533389&r1=533388&r2=533389
==============================================================================
--- struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/DojoTagLibrary.java (original)
+++ struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/DojoTagLibrary.java Sat Apr 28 09:59:01 2007
@@ -12,7 +12,6 @@
import org.apache.struts2.dojo.views.velocity.components.BindDirective;
import org.apache.struts2.dojo.views.velocity.components.DateTimePickerDirective;
import org.apache.struts2.dojo.views.velocity.components.DivDirective;
-import org.apache.struts2.dojo.views.velocity.components.FormDirective;
import org.apache.struts2.dojo.views.velocity.components.HeadDirective;
import org.apache.struts2.dojo.views.velocity.components.SubmitDirective;
import org.apache.struts2.dojo.views.velocity.components.TabbedPanelDirective;
@@ -40,7 +39,6 @@
TabbedPanelDirective.class,
TreeDirective.class,
TreeNodeDirective.class,
- FormDirective.class,
HeadDirective.class,
BindDirective.class
};
Modified: struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/freemarker/tags/DojoModels.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/freemarker/tags/DojoModels.java?view=diff&rev=533389&r1=533388&r2=533389
==============================================================================
--- struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/freemarker/tags/DojoModels.java (original)
+++ struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/freemarker/tags/DojoModels.java Sat Apr 28 09:59:01 2007
@@ -18,7 +18,6 @@
protected DivModel div;
protected AnchorModel a;
protected SubmitModel submit;
- protected FormModel form;
protected BindModel bind;
private ValueStack stack;
@@ -47,14 +46,6 @@
return dateTimePicker;
}
- public FormModel getForm() {
- if (form == null) {
- form = new FormModel(stack, req, res);
- }
-
- return form;
- }
-
public AutocompleterModel getAutocompleter() {
if (autocompleter == null) {
autocompleter = new AutocompleterModel(stack, req, res);
@@ -63,7 +54,7 @@
return autocompleter;
}
- public TabbedPanelModel getTabbedpanelModel() {
+ public TabbedPanelModel getTabbedpanel() {
if (tabbedPanel == null) {
tabbedPanel = new TabbedPanelModel(stack, req, res);
}
Copied: struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/jsp/ui/AbstractRemoteTag.java (from r531046, struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/jsp/ui/AbstractRemoteCallUITag.java)
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/jsp/ui/AbstractRemoteTag.java?view=diff&rev=533389&p1=struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/jsp/ui/AbstractRemoteCallUITag.java&r1=531046&p2=struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/jsp/ui/AbstractRemoteTag.java&r2=533389
==============================================================================
--- struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/jsp/ui/AbstractRemoteCallUITag.java (original)
+++ struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/jsp/ui/AbstractRemoteTag.java Sat Apr 28 09:59:01 2007
@@ -17,10 +17,10 @@
*/
package org.apache.struts2.dojo.views.jsp.ui;
-import org.apache.struts2.dojo.components.RemoteUICallBean;
+import org.apache.struts2.dojo.components.RemoteBean;
import org.apache.struts2.views.jsp.ui.AbstractClosingTag;
-public abstract class AbstractRemoteCallUITag extends AbstractClosingTag {
+public abstract class AbstractRemoteTag extends AbstractClosingTag {
protected String href;
protected String listenTopics;
@@ -43,7 +43,7 @@
protected void populateParams() {
super.populateParams();
- RemoteUICallBean remote = (RemoteUICallBean) component;
+ RemoteBean remote = (RemoteBean) component;
remote.setHref(href);
remote.setListenTopics(listenTopics);
remote.setLoadingText(loadingText);
Added: struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/jsp/ui/AbstractValidateTag.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/jsp/ui/AbstractValidateTag.java?view=auto&rev=533389
==============================================================================
--- struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/jsp/ui/AbstractValidateTag.java (added)
+++ struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/jsp/ui/AbstractValidateTag.java Sat Apr 28 09:59:01 2007
@@ -0,0 +1,45 @@
+/*
+ * $Id$
+ *
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.struts2.dojo.views.jsp.ui;
+
+import org.apache.struts2.dojo.components.AbstractValidateBean;
+
+/**
+ * @see AbstractValidateTag
+ */
+public abstract class AbstractValidateTag extends AbstractRemoteTag {
+ protected String validate;
+ protected String ajaxAfterValidation;
+
+ protected void populateParams() {
+ super.populateParams();
+
+ AbstractValidateBean validateBean = (AbstractValidateBean) component;
+ validateBean.setValidate(validate);
+ validateBean.setAjaxAfterValidation(ajaxAfterValidation);
+ }
+
+ public void setAjaxAfterValidation(String ajaxAfterValidation) {
+ this.ajaxAfterValidation = ajaxAfterValidation;
+ }
+
+ public void setValidate(String validate) {
+ this.validate = validate;
+ }
+
+}
Modified: struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/jsp/ui/AnchorTag.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/jsp/ui/AnchorTag.java?view=diff&rev=533389&r1=533388&r2=533389
==============================================================================
--- struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/jsp/ui/AnchorTag.java (original)
+++ struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/jsp/ui/AnchorTag.java Sat Apr 28 09:59:01 2007
@@ -31,13 +31,12 @@
/**
* @see Anchor
*/
-public class AnchorTag extends AbstractRemoteCallUITag {
+public class AnchorTag extends AbstractValidateTag {
private static final long serialVersionUID = -1034616578492431113L;
protected String targets;
- protected String preInvokeJS;
-
+
public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
return new Anchor(stack, req, res);
}
@@ -47,6 +46,7 @@
Anchor link = (Anchor) component;
link.setTargets(targets);
+ link.setValidate(validate);
}
public void setTargets(String targets) {
Modified: struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/jsp/ui/BindTag.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/jsp/ui/BindTag.java?view=diff&rev=533389&r1=533388&r2=533389
==============================================================================
--- struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/jsp/ui/BindTag.java (original)
+++ struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/jsp/ui/BindTag.java Sat Apr 28 09:59:01 2007
@@ -28,11 +28,11 @@
import com.opensymphony.xwork2.util.ValueStack;
-public class BindTag extends AbstractRemoteCallUITag {
+public class BindTag extends AbstractValidateTag {
protected String targets;
protected String sources;
protected String events;
-
+
public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
return new Bind(stack, req, res);
}
Modified: struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/jsp/ui/DivTag.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/jsp/ui/DivTag.java?view=diff&rev=533389&r1=533388&r2=533389
==============================================================================
--- struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/jsp/ui/DivTag.java (original)
+++ struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/jsp/ui/DivTag.java Sat Apr 28 09:59:01 2007
@@ -28,7 +28,7 @@
import com.opensymphony.xwork2.util.ValueStack;
-public class DivTag extends AbstractRemoteCallUITag {
+public class DivTag extends AbstractRemoteTag {
private static final long serialVersionUID = 5309231035916461758L;
Modified: struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/jsp/ui/SubmitTag.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/jsp/ui/SubmitTag.java?view=diff&rev=533389&r1=533388&r2=533389
==============================================================================
--- struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/jsp/ui/SubmitTag.java (original)
+++ struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/jsp/ui/SubmitTag.java Sat Apr 28 09:59:01 2007
@@ -59,7 +59,9 @@
protected String errorNotifyTopics;
protected String highlightColor;
protected String highlightDuration;
-
+ protected String validate;
+ protected String ajaxAfterValidation;
+
public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
return new Submit(stack, req, res);
}
@@ -91,6 +93,8 @@
submit.setErrorNotifyTopics(errorNotifyTopics);
submit.setHighlightColor(highlightColor);
submit.setHighlightDuration(highlightDuration);
+ submit.setValidate(validate);
+ submit.setAjaxAfterValidation(ajaxAfterValidation);
}
public void setAction(String action) {
@@ -187,5 +191,13 @@
public void setHighlightDuration(String highlightDuration) {
this.highlightDuration = highlightDuration;
+ }
+
+ public void setValidate(String validate) {
+ this.validate = validate;
+ }
+
+ public void setAjaxAfterValidation(String ajaxAfterValidation) {
+ this.ajaxAfterValidation = ajaxAfterValidation;
}
}
Modified: struts/struts2/trunk/plugins/dojo/src/main/resources/org/apache/struts2/static/dojo/struts/widget/Bind.js
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/dojo/src/main/resources/org/apache/struts2/static/dojo/struts/widget/Bind.js?view=diff&rev=533389&r1=533388&r2=533389
==============================================================================
--- struts/struts2/trunk/plugins/dojo/src/main/resources/org/apache/struts2/static/dojo/struts/widget/Bind.js (original)
+++ struts/struts2/trunk/plugins/dojo/src/main/resources/org/apache/struts2/static/dojo/struts/widget/Bind.js Sat Apr 28 09:59:01 2007
@@ -42,7 +42,10 @@
highlightColor : "",
highlightDuration : 2000,
-
+
+ validate : false,
+ ajaxAfterValidation : false,
+
postCreate : function() {
var self = this;
@@ -149,38 +152,57 @@
});
}
},
-
+
bindHandler : function(type, data, e) {
- //hide indicator
- dojo.html.hide(this.indicator);
-
- //publish topics
- this.notify(data, type, e);
-
- if(type == "load") {
- if(this.executeScripts) {
- //update targets content
- var parsed = this.parse(data);
- //eval scripts
- if(parsed.scripts && parsed.scripts.length > 0) {
- var scripts = "";
- for(var i = 0; i < parsed.scripts.length; i++){
- scripts += parsed.scripts[i];
- }
- (new Function('_container_', scripts+'; return this;'))(this);
- }
- this.setContent(parsed.text);
- }
- else {
- this.setContent(data);
- }
- this.highlight();
- } else {
- if(this.showError) {
- var message = dojo.string.isBlank(this.errorText) ? e.message : this.errorText;
- this.setContent(message);
- }
- }
+ //hide indicator
+ dojo.html.hide(this.indicator);
+
+ //publish topics
+ this.notify(data, type, e);
+
+ if(type == "load") {
+ if(this.validate) {
+ StrutsUtils.clearValidationErrors(this.formNode);
+ //validation is active for this action
+ var errors = StrutsUtils.getValidationErrors(data);
+ if(errors && errors.fieldErrors) {
+ //validation failed
+ StrutsUtils.showValidationErrors(this.formNode, errors);
+ return;
+ } else {
+ //validation passed
+ if(!this.ajaxAfterValidation && this.formNode) {
+ //regular submit
+ this.formNode.submit();
+ return;
+ }
+ }
+ }
+
+ // no validation or validation passed
+ if(this.executeScripts) {
+ //update targets content
+ var parsed = this.parse(data);
+ //eval scripts
+ if(parsed.scripts && parsed.scripts.length > 0) {
+ var scripts = "";
+ for(var i = 0; i < parsed.scripts.length; i++){
+ scripts += parsed.scripts[i];
+ }
+ (new Function('_container_', scripts+'; return this;'))(this);
+ }
+ this.setContent(parsed.text);
+ }
+ else {
+ this.setContent(data);
+ }
+ this.highlight();
+ } else {
+ if(this.showError) {
+ var message = dojo.string.isBlank(this.errorText) ? e.message : this.errorText;
+ this.setContent(message);
+ }
+ }
},
notify : function(data, type, e) {
@@ -254,8 +276,9 @@
}
//if there is a parent form, and it has a "onsubmit"
- //execute it, validation is usually there
- if(this.formNode && this.formNode.onsubmit != null) {
+ //execute it, validation is usually there, except is validation == true
+ //on which case it is ajax validation, instead of client side
+ if(!this.validate && this.formNode && this.formNode.onsubmit != null) {
var makeRequest = this.formNode.onsubmit.call(evt);
if(makeRequest != null && !makeRequest) {
this.log("Request canceled by 'onsubmit' of the form");
@@ -268,9 +291,14 @@
if(this.showLoading) {
this.setContent(this.loadingText);
}
+
+ var tmpHref = this.href;
+ if(!this.ajaxAfterValidation) {
+ tmpHref = tmpHref + (tmpHref.indexOf("?") > -1 ? "&" : "?") + "validateOnly=true";
+ }
dojo.io.bind({
- url: this.href,
+ url: tmpHref,
useCache: false,
preventCache: true,
formNode: self.formNode,