mirror of
https://github.com/apache/struts.git
synced 2026-08-11 01:27:14 +00:00
WW-3054 Broken FreeMarker template for double validation. Test added.
git-svn-id: https://svn.apache.org/repos/asf/struts/struts2/trunk@759162 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
@@ -110,10 +110,10 @@ END SNIPPET: supported-validators
|
||||
<#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>
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -31,7 +31,6 @@ import org.apache.struts2.StrutsConstants;
|
||||
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 @@ public class FormTagTest extends AbstractUITagTest {
|
||||
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.
|
||||
*/
|
||||
|
||||
+10
@@ -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>
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user