我紧迫的问题是如何在 JSP Web 表单中最好地处理此异常,但我相信下面的内容也可能能够提供答案。
我一直在搞一个java项目,我已经将其实现为applet/JFrame以及通过JSP实现的Web表单。在我上一个类(本质上是 Java 1)中,我学到了通过 ActionListener
中的 try/catch block 处理用户输入数据时的异常(例如 NumberFormatException
)的方法。
示例:
private ActionListener L_Weight() {
return new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
double weight = Person.DEFAULT_WEIGHT;
try {
weight = Double.parseDouble(ae.getActionCommand());
}
catch (NumberFormatException e) {
//e.printStackTrace();
}
person = new Person(
person.getGender(),
weight,
person.getAge(),
person.getNumberOfDrinks(),
person.getHoursSinceFirstDrink());
view.updatePerson(person);
}
};
}
因此,虽然这适用于 applet/JFrame,但它似乎不是 try/catch 的最佳用法,除了忽略它之外,我不知道如何处理 NumberFormatException,而且它在 Web 表单方面对我没有任何作用。
所以在网络方面,我找到了各种处理异常/错误的想法,但似乎没有一个是最好的选择。我目前最喜欢的是将 onsubmit="return checkForm(this)"
添加到我的表单提交中,其中 checkForm()
是 javascript 代码,如果提交了有效数据,它将返回 true。这看起来仍然是一个无关紧要的步骤,但是除了将变量声明为字符串并将它们解析为 double 以便我可以在 java 端进行 try/catch 错误处理之外,我不确定还可以在哪里验证提交。
所以我实现了 checkForm() 函数并且它正在工作,只是想知道这是否是 JSP 中表单验证的良好实践:
<form name="Name Input Form" action="index.jsp" method="POST" onsubmit="return checkForm(this)">
<script type="text/javascript">
function checkForm(form) {
var result = true;
var numbers = /^[0-9|\.]+$/;
var checkFields = new Array(
form.age,
form.weight,
form.drinks,
form.hours);
for (i=0; i < checkFields.length; i++) {
if (!checkFields[i].value.match(numbers)) {
alert(checkFields[i].name + " field must be a number");
checkFields[i].focus();
result = false;
break;
}
}
return result;
}
function optionChange(form) {
if (checkForm(form)) {
form.submit();
}
}
我还将性别选择设置为一个下拉菜单,调用 optionChange 函数:
<select name="gender" id="gender" onchange="optionChange(this.form)">
<option value="Male">Male</option>
<option value="Female">Female</option>
</select>
<小时/>
<小时/>
编辑:
发布这个问题后,我意识到我还有另一个与此相关的问题,在 Person 类中创建一个构造函数,将性别、体重、年龄、饮料和时间作为 String 参数,然后处理转换为各自的类型,这会是一个糟糕的选择吗?我可以将错误处理放入 try/catch block 中,但我会(如我所见)再次利用错误处理来强制验证。从这里开始,我不需要担心验证,因为 java 代码需要字符串,但这似乎是不必要的折射工作。
最佳答案
您可以使用JQuery's change功能。因此,您向每个文本字段添加一个监听器,每次更改时您都可以检查文本是否是有效数字(如果不是,则显示某种红色内联消息)。
您还可以在数字字段中使用 html5 输入类型数字。
关于java - NumberFormatException -- 验证 JSP 文件中的表单提交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22108774/