我有textfield数组,只能接受数值,即1-5。
<s:textfield name="marks[0]" maxlength="1" />
<s:textfield name="marks[1]" maxlength="1" />
<s:textfield name="marks[2]" maxlength="1" /> and so on upto 9 textfields.
我有以下的getter / setter方法
public List<Integer> getMarks(){
return marks;
}
public void setMarks(List<Integer> marks){
this.marks = marks;
}
如何确保用户不输入字母表等非数字值?如果我输入字符,它会抛出运行时异常'java.lang.ClassCastException:java.lang.String无法强制转换为java.lang.Integer'指向Next JSp页面中的validate方法。
public void validate(){
for(i=0;i<9;i++){
if (marks.get(i)>5) //this line throws above ClassCastException
addFieldError("...");
}
}
如何解决此异常以及继续验证?在其中包含单个文本字段的其他页面中,将显示invalid.fieldvalue.error,但对于列表,我将超出异常
答案 0 :(得分:1)
只需将验证逻辑放在try catch
块
public void validate(){
try{
for(i=0;i<9;i++){
if (marks.get(i)>5) //this line throws above ClassCastException
addFieldError("...");
}
}catch(Exception e){
}
}
答案 1 :(得分:0)
我通常这样做(可能有更好的解决方案)
public void setMarks(List<String> marksStr){
List<Integer> marks = new ArrayList();
for(String markStr : marksStr) {
try {
Integer mark = Integer.parseInt(markStr);
marks.add(mark);
} catch (NumberFormatException e) {
addFieldError("", "Wrong mark value: " + markStr);
}
}
this.marks = marks;
}
答案 2 :(得分:0)
在Stack overflow中的其他帖子上找到这个答案,检查一个字符串是否为整数,看看是否https://stackoverflow.com/a/1102916/1541001