我们是否可以创建一个验证类(或设计一个特定的结构),以便在客户和;GWT中的服务器?

我们是否可以创建一个验证类(或设计一个特定的结构),以便在客户和;GWT中的服务器?,gwt,gwt-platform,gwtp,Gwt,Gwt Platform,Gwtp,这是我的Gwt问题。比如说,我有一个表格,上面有电子邮件,名字,用户名,密码。。。文本框&提交按钮。当用户单击“提交”时,客户端将验证所有字段,在所有字段都确定后,它们将被发送到服务器,以便进行另一次完全相同的验证 有人建议我创建一个实用类,并将该类放入共享的包中 看看这个代码 在my.com.client包中: import my.com.shared.Utility; public class CustPresenter extends Presenter<CustP

这是我的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.shared.Utility;
公共类CustPresenter扩展
演讲者{
@注入DispatchAsync DispatchAsync;
public void postData(){
PostData postDataAction=新建PostData();
字符串fName=fNameTextBox.getText();
字符串lName=lNameTextBox.getText();
//……这里有更多的领域//
if(!Utility.isOKString(fName)){
MyDialogBox myD=新建MyDialogBox(fName,“不正常”);
}
else如果(!Utility.isOKString(lName)){
MyDialogBox myD=新建MyDialogBox(lName,“不正常”);
}
///……这里有更多的检查//
setFName(fName);
setFName(lName);
//…更多设置在此…//
dispatchAsync.execute(postDataAction,postDataCallback);
}
私有AsyncCallback postDataCallback=新建AsyncCallback(){
@凌驾
失败时的公共无效(可丢弃){
}
@凌驾
成功时公共无效(PostDataResult){
字符串resultStr=result.getResult();
if(resultStr.equals(“fName不正常”)){
MyDialogBox myD=新建MyDialogBox(fName,“不正常”);
}
else if(resultStr.equals(“lName不正常”)){
MyDialogBox myD=新建MyDialogBox(lName,“不正常”);
}
///更多显示错误消息。。。
}
};
}
在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);
    }

}
导入my.com.shared.Utility;
公共类PostDataActionHandler实现
ActionHandler{
@凌驾
公共PostDataResult执行(PostData操作、ExecutionContext上下文)
抛出ActionException{
字符串fName=action.getFName();
字符串lName=action.getLName();
//更多的人来这里//
字符串resultInfo=“”;
if(!Utility.isOKString(fName)){
resultInfo=“fName不正常”;
}
else如果(!Utility.isOKString(lName)){
resultInfo=“lName不正常”;
}
////…这里有更多的检查///
否则{
postData();
}
返回新的PostDataResult(resultInfo);
}
}
正如您在这个结构中看到的,即使我在共享包中使用了这个实用程序,我仍然需要验证相同的数据3次。还有很多重复的

所以我的问题是:


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

GWT支持通过注释进行JSR-303 Bean验证,客户端和服务器端都可以使用相同的验证。请参阅。

我仍然需要在客户端+服务器端进行检查。但对于我的问题,我正在寻找一种客户机和服务器都可以共享同一个验证类的结构或设计。该类可以接受来自客户端和服务器的数据并进行一些检查,然后返回一个可以传递到客户端或服务器的结果。您必须在客户端和服务器上进行检查,但两者的验证代码相同。@Min Hai这是正确的答案。请调查JSR-303验证。我只有10,20个简单字段要检查,为什么需要一些额外的包?我讨厌额外的软件包,因为它需要很多配置方面的麻烦&如果我做得不对,那就是浪费时间。如果我做得对,那么我需要学习如何使用它&这是另一个令人头痛的问题&学习它需要时间。我在家编程,没有人帮助。JSR-303需要一些配置,但这是需要更少代码的方式。如果您想推出自己的共享(客户机和服务器)验证类,您可以,但这需要大量代码。然而,我强烈建议你采纳大卫的建议。GWT为您提供了一些工具,比如在POJO上使用JSR-303注释进行客户端验证。您可以将验证框架与GWT编辑器相结合,以实现强大的表单验证。在服务器端,一些框架(如RestEasy)将自动为您处理JSR-303验证。