은 (다윗의 좋은 의견에 따라) 내 솔루션입니다 :
이
첫째, 기본 keypress
이벤트를 처리 할 수있는 TextInputCell의 제한이있다, 그래서 나는 거의 정확한을 만들어야했습니다 클래스 복사본을 만들고 생성자에 keypress
이벤트 유형을 추가합니다. 여기서 셀은 슈퍼 생성자에 대해 처리 할 수있는 이벤트 유형을 전달합니다. 이 클래스를 KeyPressableTextInputCell
이라고합시다. Why isn't the keypress event being sent to GWT's TextInputCell.onBrowserEvent() method?
그런 다음 onBrowserEvent()
메서드를 재정의하고 잘못된 키 입력을 방지하고 입력란의 전체 양식을 확인합니다. 예를 들어, 유효한 통화 키 입력은 0-9 및 소수점입니다. 전체 양식은 하나의 소수점 만있는 숫자 여야합니다. 이 두 가지 검사는 모두 ValidationStrategy
이라고하는 전략 인터페이스를 사용하여 수행되며 MaskedTextInputCell에 직접 입력됩니다. 나는 돈이 필드를 만들려면이 같은 작업을 수행 할 수 있습니다, 지금
public class RegularExpressionValidationStrategy implements MaskedTextInputCell.ValidationStrategy {
private String regularExpression;
public RegularExpressionValidationStrategy(String regularExpression) {
this.regularExpression = regularExpression;
}
@Override
public boolean matches(String valueToCheck) {
return valueToCheck.matches(regularExpression);
}
}
:
public class MonetaryTextInputCell extends MaskedTextInputCell {
public MonetaryTextInputCell() {
super(new RegularExpressionValidationStrategy("[0-9.]"),
new RegularExpressionValidationStrategy("^[0-9.][0-9]*[0-9.]?[0-9]*$"));
}
}
우수한
나는 다음 ValidationStrategy의 정규 표현식 구현을 만들었습니다! 마침내 keyup/keydown 이벤트 캡처 및 트리밍 작업을 수행했지만 preventDefault가 훨씬 잘 작동합니다! 제 궁극적 인 해결책을 별도의 답변으로 게시하겠습니다 만, 귀하의 의견을 받아 들일 것입니다. –