0

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

有人建议我创建一个实用程序类并将该类放入共享包中。

看看这段代码

在 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 次。而且有很多重复。

所以我的问题是:

我们可以创建一个特定的验证类(或设计一个特定的结构)并将该类放在共享包中,以便客户端和服务器可以使用它,所以我只需要验证 1 次而不是像这样执行 3 次?

4

1 回答 1

1

GWT 通过注解支持 JSR-303 Bean Validation,并且可以在客户端和服务器端使用相同的验证。请参阅GWT 文档的验证部分

于 2013-10-30T14:08:05.283 回答