如何解决在jsp中输入对INTEGER的类型限制
<div class="user-values"> <!-- for user's monthly gross pay -->
<label for="grosspay">Monthly gross pay: </label>
$<input id="grosspay" type="number" name="grosspay"
placeholder="0.0 or greater" step="0.01" value="${grosspay}">
<span class="req">*</span>
</div>
<div class="user-values"> <!-- for error message -->
<p class="msg">${message2}</p>
</div>
<div class="user-values"> <!-- for user's dependents -->
<label for="noOfDependents">Number of dependents: </label>
<input id="noOfDependents" type="number" name="dependents"
placeholder="0 or greater" step="1" value="${dependents}">
<span class="req">*</span>
</div>
<div class="user-values"> <!-- for error message -->
<p class="msg">${message3}</p>
</div>
“每月总薪水”接受双值。 “受抚养人数目”应仅接受整数。
运行此代码时:如果我为“从属人数”填入数字2或2,然后单击“计算”,则计算将由我的servlet成功处理。
但是,如果我填写双精度值2.1或2.2或3.1的数字,依此类推,则在表单中出现以下错误:
我的第一个问题: 输入双精度值2.0或3.0或4.0等的数字时,出现NumberFormatException
Type: class java.lang.NumberFormatException
Message: For input string: "2.0"
为什么我没有收到与上图类似的错误?或者,为什么我的处理在2.0中不成功?请提出一个解决方案,以便我可以避免1.0或2.0或3.0等值的异常?
我的第二个问题: 我的fill.jsp文件中两种输入类型的值部分在NetBeans IDE中向我发出以下警告:
"Bad value " " for attribute "value" on element "input": Expected a minus sign or a digit but saw " " instead."
如何避免这种警告?
请注意:即使出现警告,我的程序也可以正常运行。
解决方法
我想出了答案:
在我的servlet中,我有一部分代码:客户端的“ depends”输入框的值为2.0,在服务器端以String的形式接收。
String dependentNum = request.getParameter("dependents");
user.setDependents(Integer.parseInt(dependentNum));
由于某种原因,第二行代码为我抛出了NumberFormatException。因此,我将Servlet代码中的第二行更改为:
user.setDependents((int) Double.parseDouble(dependentNum));
我不知道为什么整数对象在接受字符串值2.0并将其转换为2时遇到问题。解决方法是将字符串值2.0转换为双精度并将其转换为整数,然后我避免完全获取NumberFormatException。
但是,我仍然无法理解,为什么在显示2.0、3.0等双精度值时,为什么无法显示与图像中相同的验证错误消息,如下:
,输入类型号允许使用2.0,因为从理论上讲它是整数,而2.1是双精度数。
2.0 -> 2
但是,在服务器端,它确实会引发错误,因为整数不能带有零尾或句点。
在这种情况下,您可能应该去除尾随零。
您可以使用子字符串将其剪切,然后将其转换回Integer。
例如:
double number = 2.0;
int newnumber = Integer.parseInt(String.valueOf(number).substring(0,1));
所以servlet应该看起来像这样:
String dependents = req.getParameter("dependents");
double dependentsd = Double.parseDouble(dependents);
int numofDependents = Integer.parseInt(String.valueOf(number).substring(0,1));
您可以通过以下测试案例进行验证:
String dependents = "2.0";
double dependentsd = Double.parseDouble(dependents);
int numofDependents = Integer.parseInt(String.valueOf(dependentsd).substring(0,1));
System.out.println(numofDependents);
或者您也可以将double转换为int,如下所示:
(int) Double.parseDouble(dependentNum)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。