2011-05-12 70 views
5

有没有人知道编程器和jsr 303验证如何与GWT 2.3 一起工作?验证API已添加到gwt sdk。但我无法使用编辑器框架验证实体。无论我做什么 我都不会从客户端或服务器端抛出错误。带编辑器框架的GWT验证器

这里是一个代码段:

public class P { 

    public P() {} 

    @Size(min=4) 
    private String name; 

    public void setName(String name) { 
    this.name = name; 
    } 

    public String getName() { 
    return name; 
    } 

} 

PEditor

public class PEditor extends Composite implements Editor<P> { 

    private static PEditorUiBinder uiBinder = GWT.create(PEditorUiBinder.class); 

    interface PEditorUiBinder extends UiBinder<Widget, PEditor> {} 

    @UiField 
    TextBox name; 

    public PEditor() { 
    initWidget(uiBinder.createAndBindUi(this)); 
    } 

} 

PEditor pEditor; 
    interface Driver extends SimpleBeanEditorDriver<P, PEditor> {} 

    Driver driver = GWT.<Driver> create(Driver.class); 

    public void onModuleLoad() { 

    pEditor = new PEditor(); 
    driver.initialize(pEditor); 
    P p = new P(); 
    driver.edit(p); 
    pEditor.name.setText("G"); 
    driver.flush(); 

    if(driver.hasErrors()) { 
     List<EditorError> errors = driver.getErrors(); 

     for (EditorError error : errors) { 
      System.out.println(error.getMessage()); 

     } 

    } 
    } 

感谢您的帮助

回答

2

验证API(至少2.3版本)不会为您构建客户端代码 - 它是一种可集成在服务器上的工具,以便在某些情况下使服务器反吐错误。

EditorDriver.hasErrors()的调用只是为了检查是否有代码告诉本地代表是否有错误 - 客户端验证可以通过这个来实现。

现在最自动的情况是使用RequestFactory时 - 如果您的服务器classpath上有javax.validation jar(api和sources)以及验证库(hibernate-validator和apache的bval是两个这样的库),Receiver回调将调用onViolation

随着RequestFactory被用来从服务器获取违规,该RequestFactoryEditorDriver然后可以用来推错误的UI,但使用HasEditorErrors编辑器实例和包装,像ValueBoxEditorDecorator的,或只是通过某种机制通知用户(警告,横幅,你的debug sys.out.println等),当调用onViolation时。

如果使用RPC,您可以自行运行服务器验证,并且(从2.3开始)通过验证过程调用driver.setConstraintViolations和服务器上生成的ConstraintViolation对象。