我的緊迫問題是如何在JSP Web窗體中最好地處理這個異常,但是我相信下面的代碼也可以提供答案。NumberFormatException - 驗證JSP文件中的表單提交?
我一直在搞一個java項目,我已經實現了一個applet/JFrame和一個通過JSP的web窗體。在最後一堂課(本質上是Java 1)中,當用戶輸入數據時,我通過ActionListener
中的try/catch塊處理了異常處理方法,如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);
}
};
}
儘管這適用於小程序/ JFrame的,它似乎因此不喜歡的try/catch的最佳用法,我不知道如何處理以外的NumberFormatException的做忽略它,它在網頁表單上對我沒有任何幫助。
所以在網絡方面,我發現了處理異常/錯誤的各種想法,但沒有一個看起來像是最好的選擇。我目前的最愛是將onsubmit="return checkForm(this)"
添加到我的表單提交中,其中checkForm()
是JavaScript代碼,如果提交有效數據,它將返回true。這仍然看起來像一個無關的步驟,但除了聲明變量作爲字符串和解析它們作爲雙打,以便我可以嘗試/ catch錯誤處理在java端,我不知道我可以驗證提交。
所以我實現了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類更是把性別,體重構造,年齡,飲料和小時數作爲字符串參數,然後將轉換處理爲各自的類型?我可以把錯誤處理放在try/catch塊中,但是我會(正如我所看到的那樣)利用錯誤處理來強制驗證。從這裏我不需要擔心驗證,因爲java代碼會期望字符串,但這看起來像是不必要的重構工作。
非常感謝你,不知道那些。我猜一般的想法是,我應該在HTML端進行驗證而不是java? –
@akevit你應該做的兩個。在客戶端,這樣你就不會重載驗證這些東西的服務器。並在服務器上,以防有人繞過客戶端並直接發送數據到服務器(例如手動GET或POST) – xp500
所以我想我的問題是如何在服務器端做到這一點,而不必將變量類型更改爲字符串?看起來,我可以做錯誤檢查的唯一方法是將預期的輸入類型更改爲字符串,然後使用大量的投射來使其工作。我對使用JSP非常陌生,Bean對變量使用默認的get/set方法。 –