输入类型编号限制为 jsp 中的 INTEGER

input type number restriction to an INTEGER in jsp

我有一个 fill.jsp 文件,其中包含以下代码:

<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 会成功处理计算。

但是,如果我填写 double 值 2.1 或 2.2 或 3.1 等的数字,我的表单中会出现以下错误:

我的第一个问题: 当我输入 double 值 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."

我怎样才能避免这个警告?

请注意:我的程序 运行 即使有警告也能正常运行。

输入类型数字允许 2.0,因为它理论上是一个整数,不像 2.1,它是双精度数。

2.0 -> 2

但是,在服务器端,它确实会引发错误,因为整数不能有尾部零或句点。

在这种情况下,您可能应该去除尾部零。

您可以使用子字符串对其进行切割,然后将其转换回整数。

例如:

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)

我找到答案了:

在我的 servlet 中,我有一段代码:client-side 上的“依赖”输入框的值为 2.0,它在 server-side 中作为字符串接收。

String dependentNum = request.getParameter("dependents");
user.setDependents(Integer.parseInt(dependentNum));

出于某种原因,第二行代码为我抛出 NumberFormatException。因此,我将 servlet 代码中的第二行更改为:

user.setDependents((int) Double.parseDouble(dependentNum));

我不知道为什么 Integer 对象在接受 String 值 2.0 并将其转换为 2 时遇到问题。解决方法是将 String 值 2.0 转换为 double 并将其转换为 int ,并且我避免完全获取 NumberFormatException。

但是,我仍然无法理解,为什么在双精度值(如 2.0、3.0)时不能显示与图像中相同的验证错误消息,而对于双精度值(如 2.1、3.2 等)可以显示.,如下: