1

数値のみ、つまり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.

次のように、これのためのゲッター/セッターメソッドがあります

public List<Integer> getMarks(){
     return marks;
}
public void setMarks(List<Integer> marks){
     this.marks = marks;
}

ユーザーがアルファベットなどの数値以外の値を入力しないようにするにはどうすればよいですか? 文字を入力すると、実行時例外「java.lang.ClassCastException: java.lang.String を java.lang.Integer にキャストできません」がスローされ、次の JSp ページの検証メソッドを指します。

public void validate(){
  for(i=0;i<9;i++){
     if (marks.get(i)>5)     //this line throws above ClassCastException
    addFieldError("...");
  }
}

この例外と続行するための検証を解決するにはどうすればよいですか? 単一のテキストフィールドがある他のページでは、invalid.fieldvalue.error が表示されますが、リストでは例外を超えています

4

2 に答える 2

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){
  }
}
于 2012-12-18T21:07:31.397 に答える
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;
}
于 2012-12-18T14:24:43.337 に答える