Author: musachy Date: Fri Mar 27 14:49:39 2009 New Revision: 759162 URL: http://svn.apache.org/viewvc?rev=759162&view=rev Log: WW-3054 Broken FreeMarker template for double validation. Test added.
Added: struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/DoubleValidationAction.java struts/struts2/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/DoubleValidationAction-validation.xml struts/struts2/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-24.txt Modified: struts/struts2/trunk/core/src/main/resources/template/xhtml/form-close-validate.ftl struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/FormTagTest.java Modified: struts/struts2/trunk/core/src/main/resources/template/xhtml/form-close-validate.ftl URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/resources/template/xhtml/form-close-validate.ftl?rev=759162&r1=759161&r2=759162&view=diff ============================================================================== --- struts/struts2/trunk/core/src/main/resources/template/xhtml/form-close-validate.ftl (original) +++ struts/struts2/trunk/core/src/main/resources/template/xhtml/form-close-validate.ftl Fri Mar 27 14:49:39 2009 @@ -110,10 +110,10 @@ <#elseif validator.validatorType = "double"> if (continueValidation && field.value != null) { var value = parseFloat(field.value); - if (<#if validator.minInclusive??>value < ${validator.minInclusive?c}<#else>false</#if> || - <#if validator.maxInclusive??>value > ${validator.maxInclusive?c}<#else>false</#if> || - <#if validator.minExclusive??>value <= ${validator.minExclusive?c}<#else>false</#if> || - <#if validator.maxExclusive??>value >= ${validator.maxExclusive?c}<#else>false</#if>) { + if (<#if validator.minInclusive??>value < ${validator.minInclusive}<#else>false</#if> || + <#if validator.maxInclusive??>value > ${validator.maxInclusive}<#else>false</#if> || + <#if validator.minExclusive??>value <= ${validator.minExclusive}<#else>false</#if> || + <#if validator.maxExclusive??>value >= ${validator.maxExclusive}<#else>false</#if>) { addError(field, error); errors = true; <#if validator.shortCircuit>continueValidation = false;</#if> Added: struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/DoubleValidationAction.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/DoubleValidationAction.java?rev=759162&view=auto ============================================================================== --- struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/DoubleValidationAction.java (added) +++ struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/DoubleValidationAction.java Fri Mar 27 14:49:39 2009 @@ -0,0 +1,39 @@ +/* + * $Id$ + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.views.jsp.ui; + +import com.opensymphony.xwork2.ActionSupport; + +/** + * + */ +public class DoubleValidationAction extends ActionSupport { + private double longint; + + public double getLongint() { + return longint; + } + + public void setLongint(double longint) { + this.longint = longint; + } +} Modified: struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/FormTagTest.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/FormTagTest.java?rev=759162&r1=759161&r2=759162&view=diff ============================================================================== --- struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/FormTagTest.java (original) +++ struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/ui/FormTagTest.java Fri Mar 27 14:49:39 2009 @@ -31,7 +31,6 @@ import org.apache.struts2.TestAction; import org.apache.struts2.TestConfigurationProvider; import org.apache.struts2.components.Form; -import org.apache.struts2.dispatcher.mapper.DefaultActionMapper; import org.apache.struts2.views.jsp.AbstractUITagTest; import org.apache.struts2.views.jsp.ActionTag; @@ -392,6 +391,88 @@ verify(FormTag.class.getResource("Formtag-22.txt")); } +/** + * Tests the numbers are formatted correctly to not break the javascript, using doubles + */ + public void testFormWithCustomOnsubmitEnabledWithValidateEnabled4() throws Exception { + + final Container cont = container; + // used to determined if the form action needs js validation + configurationManager.setConfiguration(new com.opensymphony.xwork2.config.impl.DefaultConfiguration() { + private DefaultConfiguration self = this; + public Container getContainer() { + return new Container() { + public <T> T inject(Class<T> implementation) {return null;} + public void removeScopeStrategy() {} + public void setScopeStrategy(Strategy scopeStrategy) {} + public <T> T getInstance(Class<T> type, String name) {return null;} + public <T> T getInstance(Class<T> type) {return null;} + public Set<String> getInstanceNames(Class<?> type) {return null;} + + public void inject(Object o) { + cont.inject(o); + if (o instanceof Form) { + ((Form)o).setConfiguration(self); + } + } + }; + } + public RuntimeConfiguration getRuntimeConfiguration() { + return new RuntimeConfiguration() { + public ActionConfig getActionConfig(String namespace, String name) { + ActionConfig actionConfig = new ActionConfig("", name, DoubleValidationAction.class.getName()) { + public List getInterceptors() { + List interceptors = new ArrayList(); + + ValidationInterceptor validationInterceptor = new ValidationInterceptor(); + validationInterceptor.setIncludeMethods("*"); + + InterceptorMapping interceptorMapping = new InterceptorMapping("validation", validationInterceptor); + interceptors.add(interceptorMapping); + + return interceptors; + } + public String getClassName() { + return DoubleValidationAction.class.getName(); + } + }; + return actionConfig; + } + + public Map getActionConfigs() { + return null; + } + }; + } + }); + + FormTag tag = new FormTag(); + tag.setPageContext(pageContext); + tag.setName("myForm"); + tag.setMethod("post"); + tag.setAction("myAction"); + tag.setAcceptcharset("UTF-8"); + tag.setEnctype("myEncType"); + tag.setTitle("mytitle"); + tag.setOnsubmit("submitMe()"); + tag.setValidate("true"); + tag.setNamespace(""); + + UpDownSelectTag t = new UpDownSelectTag(); + t.setPageContext(pageContext); + t.setName("myUpDownSelectTag"); + t.setList("{}"); + + tag.doStartTag(); + tag.getComponent().getParameters().put("actionClass", DoubleValidationAction.class); + t.doStartTag(); + t.doEndTag(); + tag.doEndTag(); + + verify(FormTag.class.getResource("Formtag-24.txt")); + } + + /** * This test with form tag validation disabled. */ Added: struts/struts2/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/DoubleValidationAction-validation.xml URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/DoubleValidationAction-validation.xml?rev=759162&view=auto ============================================================================== --- struts/struts2/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/DoubleValidationAction-validation.xml (added) +++ struts/struts2/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/DoubleValidationAction-validation.xml Fri Mar 27 14:49:39 2009 @@ -0,0 +1,10 @@ +<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.dtd"> +<validators> + <field name="myUpDownSelectTag"> + <field-validator type="double"> + <param name="minInclusive">6000.10</param> + <param name="maxInclusive">10000.10</param> + <message>bar must be between ${minInclusive} and ${maxInclusive}.</message> + </field-validator> + </field> +</validators> \ No newline at end of file Added: struts/struts2/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-24.txt URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-24.txt?rev=759162&view=auto ============================================================================== --- struts/struts2/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-24.txt (added) +++ struts/struts2/trunk/core/src/test/resources/org/apache/struts2/views/jsp/ui/Formtag-24.txt Fri Mar 27 14:49:39 2009 @@ -0,0 +1,54 @@ +<script type="text/javascript" src="/struts/xhtml/validation.js"></script> +<script type="text/javascript "src="/struts/utils.js"></script> +<form id="myAction" name="myForm" onsubmit="submitMe(); return validateForm_myAction();" action="/myAction.action" method="post" enctype="myEncType" title="mytitle" accept-charset="UTF-8" onreset="clearErrorMessages(this);clearErrorLabels(this);"> +<table class="wwFormTable"> <tr> + <td class="tdLabel"></td> + <td> <script type="text/javascript" src="/struts/optiontransferselect.js"></script> +<table> +<tr><td> +<select name="myUpDownSelectTag" size="5" id="myAction_myUpDownSelectTag" multiple="multiple"> +</select></td></tr> +<tr><td> + <input type="button" value="^" onclick="moveOptionUp(document.getElementById('myAction_myUpDownSelectTag'), 'key', '');" /> + <input type="button" value="v" onclick="moveOptionDown(document.getElementById('myAction_myUpDownSelectTag'), 'key', '');" /> + <input type="button" value="*" onclick="selectAllOptions(document.getElementById('myAction_myUpDownSelectTag'), 'key', '');" /> +</td></tr> +</table> +</td> +</tr> +</table> +</form> + + +<script type="text/javascript"> + var containingForm = document.getElementById("myAction"); + StrutsUtils.addEventListener(containingForm, "submit", + function(evt) { + var updownselectObj = document.getElementById("myAction_myUpDownSelectTag"); + selectAllOptionsExceptSome(updownselectObj, "key", ""); + }, true); +</script> + +<script type="text/javascript"> + function validateForm_myAction() { + form = document.getElementById("myAction"); + clearErrorMessages(form); + clearErrorLabels(form); + var errors = false; + var continueValidation = true; + //fieldname:myUpDownSelectTag + //validatorname:double + if(form.elements['myUpDownSelectTag']){ + field=form.elements['myUpDownSelectTag']; + var error="bar must be between 6000.10 and 10000.10."; + if(continueValidation && field.value!=null){ + var value = parseFloat(field.value); + if(value<6000.10||value>10000.10||false||false){ + addError(field,error); + errors=true; + } + } + } + return!errors; + }</script> +