我们可以创建一个可以在客户端和客户端之间共享的验证类(或设计某个结构)。 GWT中的服务器?

时间:2013-10-30 14:01:07

标签: gwt gwt-platform gwtp

这是我的Gwt问题。说,我有一个包含电子邮件,firstName,用户名,密码的表单... Textboxes&提交按钮。当用户单击“提交”时,客户端将验证所有字段,在所有字段都正常后,它们将被发送到服务器以进行另一次完全相同的验证。

有人建议我做一个实用课程&将该课程纳入共享包。

看看这段代码

在my.com.client包中:

import my.com.shared.Utility;    

public class CustPresenter extends
    Presenter<CustPresenter.MyView, CustPresenter.MyProxy> {



  @Inject DispatchAsync dispatchAsync;


  public void postData(){
     PostData postDataAction=new PostData();
     String fName=fNameTextBox.getText();
     String lName=lNameTextBox.getText();
     //....... more field here ....//
     if(!Utility.isOKString(fName)){
        MyDialogBox myD=new MyDialogBox(fName, "Not OK");
     }
     else if (!Utility.isOKString(lName)){
        MyDialogBox myD=new MyDialogBox(lName, "Not OK");
     }
     ///.......more checking here//

    postDataAction.setFName(fName);
    postDataAction.setFName(lName);
    //... more setting here...// 
     dispatchAsync.execute(postDataAction, postDataCallback);

 }

 private AsyncCallback<PostDataResult> postDataCallback=new AsyncCallback<PostDataResult>(){

    @Override
    public void onFailure(Throwable caught) {

    }

    @Override
    public void onSuccess(PostDataResult result) {
         String resultStr=result.getResult();
         if(resultStr.equals("fName is not OK")){
             MyDialogBox myD=new MyDialogBox(fName, "Not OK");
         }
         else if (resultStr.equals("lName is not OK")){
             MyDialogBox myD=new MyDialogBox(lName, "Not OK");
         }
         /// more displaying err message...
    }
   };
}
my.com.server包中的

import my.com.shared.Utility;
public class PostDataActionHandler implements
        ActionHandler<PostData, PostDataResult> {
    @Override
    public PostDataResult execute(PostData action, ExecutionContext context)
            throws ActionException {
        String fName=action.getFName();
        String lName=action.getLName();
        //more geting here....//
        String resultInfo="";
        if(!Utility.isOKString(fName)){
              resultInfo="fName is not OK";
        }
        else if (!Utility.isOKString(lName)){
              resultInfo="lName is not OK";
        }
       ////... more checking here///
        else{
            postData();
        }
        return new PostDataResult(resultInfo);
    }

}

正如您在此结构中所看到的,即使我在共享包中使用Utility,我仍然需要验证相同的数据3次。而且有很多重复。

所以我的问题是:

我们可以创建某个验证类(或设计某个结构)&amp;将该课程放在共享包中所以客户和服务器可以使用它,所以我只需要验证一次而不是这样做3次吗?

1 个答案:

答案 0 :(得分:1)

GWT通过注释支持JSR-303 Bean验证,并且可以在客户端和服务器端使用相同的验证。请参阅validation section of the GWT doc