0

これが私のGwtの問題です。たとえば、メール、firstName、ユーザー名、パスワード...テキストボックスと送信ボタンを含むフォームを取得しました。ユーザーが [送信] をクリックすると、クライアントはすべてのフィールドを検証し、すべてのフィールドに問題がなければ、まったく同じ検証のためにサーバーに送信されます。

誰かがユーティリティ クラスを作成し、そのクラスを共有パッケージに入れることを提案しました。

このコードを見てください

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);
    }

}

この構造からわかるように、共有パッケージでユーティリティを使用したとしても、同じデータを 3 回検証する必要があります。しかも重複が多い。

だから私の質問は:

特定の検証クラスを作成 (または特定の構造を設計) し、そのクラスを共有パッケージに配置して、クライアントとサーバーがそれを使用できるようにすることはできますか?

4

1 に答える 1

1

GWT はアノテーションによる JSR-303 Bean Validation をサポートしており、同じ検証をクライアント側とサーバー側の両方で使用できます。GWT docの検証セクションを参照してください。

于 2013-10-30T14:08:05.283 に答える