在 struts 里做过 floatRange Validate的朋友请进(300分)

  • 主题发起人 主题发起人 wsn
  • 开始时间 开始时间
W

wsn

Unregistered / Unconfirmed
GUEST, unregistred user!
在 struts 里做过 floatRange Validate的朋友请进,我这里有好多输入域
是float类型的把值限定在 0.00 和 9999999.99之间,一开始的时候一切都
很正常,但是后来做边界测试的时候发现如果输入10000000竟然也能通过
Validate,真是把我搞晕了。
-------------------------------------------
我的代码是这样写的:
<field property="f006" depends="maxlength,float,floatRange">
<arg0 key="AO010_T10_form.f006"/>
<arg1 name="maxlength" key="${var:maxlength}" resource="false"/>
<arg1 name="floatRange" key="${var:min}" resource="false"/>
<arg2 name="floatRange" key="${var:max}" resource="false"/>
<var>
<var-name>maxlength</var-name>
<var-value>10</var-value>
</var>
<var>
<var-name>min</var-name>
<var-value>0.00</var-value>
</var>
<var>
<var-name>max</var-name>
<var-value>9999999.99</var-value>
</var>
</field>
-------------------------------------------
apache.org 上down的 validator-rules.xml 是这样写的,我看不出又任何问题
<validator name="floatRange"
classname="org.apache.struts.validator.FieldChecks"
method="validateFloatRange"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionErrors,
javax.servlet.http.HttpServletRequest"
depends="float"
msg="errors.range">
<javascript><![CDATA[
function validateFloatRange(form) {
var isValid = true;
var focusField = null;
var i = 0;
var fields = new Array();
oRange = new floatRange();
for (x in oRange) {
var field = form[oRange[x][0]];

if ((field.type == 'text' ||
field.type == 'textarea') &amp;&amp;
(field.value.length > 0)) {

var fMin = parseFloat(oRange[x][2]("min"));
var fMax = parseFloat(oRange[x][2]("max"));
var fValue = parseFloat(field.value);
alert(fValue);
alert(fMin);
alert(fMax);
if (!(fValue >= fMin &amp;&amp;
fValue <= fMax)) {
if (i == 0) {
focusField = field;
}
fields[i++] = oRange[x][1];
isValid = false;
}
}
}
if (fields.length > 0) {
focusField.focus();
alert(fields.join('/n'));
}
return isValid;
}]]>
</javascript>
</validator>
难道这个是bug吗?我怎么改呢
 
刚才查找到这个
http://www.mail-archive.com/struts-dev@jakarta.apache.org/msg15974.html

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=20884
看样子这个bug解决了呀,怎么我这里还是。。。。。
 
版主:
我发现出现这样的问题在于javascript的精度不够理想,而且现在apache的cvs上
看到validate的处理机制也已经改变了。所以我思考的问题已经不是现在的这个了。
因此这个贴子请帮我结束掉,分数随意支配。谢谢。[:)]
 
java和kavascript都存在浮点数处理精度不够的问题。
javascript的解决方法是:
<script>
alert(parseFloat(12.44644).toFixed(2));
</script>
想要精确到几位,就tofixed几
java的我还不知道:
可以看:
http://expert.csdn.net/Expert/topic/2410/2410617.xml?temp=.3880579
 
多人接受答案了。
 
绮剧‘鍒板嚑浣嶆垜鍒拌繕鐪熶笉鐭ラ亾,瀹炲湪鎰熻阿,
杩欏笘瀛愬簲璇ユ槸浣犵粰鐨勭瓟妗?绠楁垜娆犱綘300鏂囧ソ浜?[:)]
 
后退
顶部