2011-11-07 2 views

답변

15

특정 이벤트에 대한 사용자 입력의 유효성을 검사하면됩니다. 예를 들어, 모든 키 입력 (KeyPressEvent), TextBox가 포커스를 잃을 때 (ValueChangeEvent), 버튼 누름시 (ClickEvent) 등이 있습니다. 이벤트 핸들러를 구현합니다 (예 : KeyPressHandler를 만들고 TextBox를 사용하여 구현을 등록하십시오. 그런 다음 처리기에서 TextBox 값의 유효성을 검사하고 숫자 이외의 다른 값이 포함되어 있으면 값이 유효하지 않다는 것을 사용자에게 알리는 아마도 메서드에서 반환됩니다. 이 같은

뭔가 : 당신이 할 수있는 검증의 많은 경우

final TextBox textBox = new TextBox(); 
textBox.addKeyPressHandler(new KeyPressHandler() { 
    @Override 
    public void onKeyPress(KeyPressEvent event) { 
     String input = textBox.getText(); 
     if (!input.matches("[0-9]*")) { 
      // show some error 
      return; 
     } 
     // do your thang 
    } 
}); 

, 당신은 아마 바퀴를 재발의 많은에서 당신을 절약 할 몇 가지 검증 프레임 워크를 소개합니다. 요즘 더 나은 대안이 있을지 모르지만 개인적으로 나는 GWT-VL validation framwork에 상당히 만족하고 있습니다.

+0

그러나 이것은 꽤 기본적인 것이므로 약간의 인터넷 검색 결과로 해결할 수 있어야합니다. – toman

+6

GWT ValueBox , DoubleBox, IntegerBox 또는 LongBox를 사용하지 않는 특별한 이유는 모든 유효성 검사, 서식 지정 및 I18N 지원입니다. – SSR

+2

이 작업을 백 스페이스로 처리하고 Tab 키를 사용하여 탐색합니다. – knocker

11

다음은 좀 더 일반적인 접근법이며 코드 재사용을 허용합니다. 원하는 모든 텍스트 상자에 대해 NumbersOnly 핸들러를 사용할 수 있습니다.

intbox1.addKeyPressHandler(new NumbersOnly()); 
intbox2.addFocusHandler(new OnFocus()); 


//inner class 
class NumbersOnly implements KeyPressHandler { 
     @Override 
     public void onKeyPress(KeyPressEvent event) { 
      if(!Character.isDigit(event.getCharCode())) 
       ((IntegerBox)event.getSource()).cancelKey(); 
     } 
    } 
+5

백 스페이스와 탭 키를 처리하는 방법은 무엇입니까? – knocker

+0

@knocker - 이렇게하면 백 스페이스, 탭, 복사/붙여 넣기, 집/끝, 모두 선택 및 제대로 작동하지 않도록 할 수 있습니다. cancelKey는 behindDefault를 호출합니다. 이 솔루션은 부분적으로 작동하지만 매우 제한적입니다. – sixtyfootersdude

6
class NumbersOnly implements KeyPressHandler { 

     @Override 
     public void onKeyPress(KeyPressEvent event) { 
      if (!Character.isDigit(event.getCharCode()) 
        && event.getNativeEvent().getKeyCode() != KeyCodes.KEY_TAB 
        && event.getNativeEvent().getKeyCode() != KeyCodes.KEY_BACKSPACE){ 
       ((IntegerBox) event.getSource()).cancelKey(); 
      } 
     } 
    } 
+0

GWT 2.5에서 Firefox 및 Safari에서이 코드를 사용하여 다른 사람을 테스트하지 않은 백스 페이스 키가 작동하지 않습니다. 복사/붙여 넣기, 화살표 키, 집/끝 또는 모두 선택에서는 작동하지 않습니다. – sixtyfootersdude

4

나는 예를 들어 다른 예외에게 번호를 복사 할 수있는 가능성을 추가했습니다. 여전히 클립 보드에서 물건을 붙여 넣을 수 없습니다.

public class NumbersOnlyKeyPressHandler implements KeyPressHandler { 
    @Override 
    public void onKeyPress(KeyPressEvent event) { 

     switch(event.getNativeEvent().getKeyCode()) { 
     case KeyCodes.KEY_TAB: 
     case KeyCodes.KEY_BACKSPACE: 
     case KeyCodes.KEY_DELETE: 
     case KeyCodes.KEY_LEFT: 
     case KeyCodes.KEY_RIGHT: 
     case KeyCodes.KEY_UP: 
     case KeyCodes.KEY_DOWN: 
     case KeyCodes.KEY_END: 
     case KeyCodes.KEY_ENTER: 
     case KeyCodes.KEY_ESCAPE: 
     case KeyCodes.KEY_PAGEDOWN: 
     case KeyCodes.KEY_PAGEUP: 
     case KeyCodes.KEY_HOME: 
     case KeyCodes.KEY_SHIFT: 
     case KeyCodes.KEY_ALT: 
     case KeyCodes.KEY_CTRL:break; 
     default: 

      if(event.isAltKeyDown() || (event.isControlKeyDown() && (event.getCharCode() != 'v'&& event.getCharCode() != 'V')) ) 
       break; 

      if(!Character.isDigit(event.getCharCode())) 
        if(event.getSource() instanceof IntegerBox) 
         ((IntegerBox)event.getSource()).cancelKey(); 
     } 
    } 
} 
1

이 하나를 시도

public void onKeyPress(KeyPressEvent event) { 
    if(event.getNativeEvent().getKeyCode()!=KeyCodes.KEY_DELETE && 
     event.getNativeEvent().getKeyCode()!=KeyCodes.KEY_BACKSPACE && 
     event.getNativeEvent().getKeyCode()!=KeyCodes.KEY_LEFT && 
     event.getNativeEvent().getKeyCode()!=KeyCodes.KEY_RIGHT){ 
      String c = event.getCharCode()+""; 
      if(RegExp.compile("[^0-9]").test(c)) 
       textbox.cancelKey(); 
    } 
} 
2

IntegerBox 또는 LongBox 중 하나를 사용하여 텍스트 상자를 교체합니다.

이것은 숫자를 허용하는 것과 의미 상 동일한 것은 아니지만 대부분의 경우에는 틀림없이 좋습니다. 또한 정수형 구문 분석을 무료로 수행 할 수 있습니다.

+0

그러나 숫자가 아닌 값을 붙여 넣는 복사를 방지하지는 못합니다. – Stultuske

관련 문제