java - NumberFormatException -- 验证 JSP 文件中的表单提交?

标签 java javascript forms jsp

我紧迫的问题是如何在 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>
<小时/>

欢迎您查看web appsource

<小时/>

编辑:

发布这个问题后,我意识到我还有另一个与此相关的问题,在 Person 类中创建一个构造函数,将性别、体重、年龄、饮料和时间作为 String 参数,然后处理转换为各自的类型,这会是一个糟糕的选择吗?我可以将错误处理放入 try/catch block 中,但我会(如我所见)再次利用错误处理来强制验证。从这里开始,我不需要担心验证,因为 java 代码需要字符串,但这似乎是不必要的折射工作。

最佳答案

您可以使用JQuery's change功能。因此,您向每个文本字段添加一个监听器,每次更改时您都可以检查文本是否是有效数字(如果不是,则显示某种红色内联消息)。

您还可以在数字字段中使用 html5 输入类型数字。

关于java - NumberFormatException -- 验证 JSP 文件中的表单提交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22108774/

相关文章:

java - 同步线程上的 NullPointerException

java - 将 double 从一项 Activity 转移到另一项 Activity

从外部 Java 程序在 JBoss AS 6 上进行 Java JNDI 查找失败

javascript - 使用主干提交表单

javascript - 我正在尝试从几个表单中提交一个表单,但提交的值只属于第一个

java - 保持套接字服务器打开以供多次使用?

javascript - 从另一个文件加载 Angular

javascript - 转换为 1e+30 的数字

javascript - Angular : Can't export excel using ExcelJS - error TS2307: Cannot find module 'stream' - error TS2503: Cannot find namespace 'NodeJS'

forms - Angular2 更新 FormGroup 嵌套值?