Можем ли мы создать класс проверки (или разработать определенную структуру), который можно будет использовать между клиентом и сервером в GWT?

Вот моя проблема Gwt. Скажем, у меня есть форма с электронной почтой, именем, именем пользователя, паролем... Текстовые поля и кнопка отправки. Когда пользователи нажимают «Отправить», клиент проверяет все поля, после того как все поля будут в порядке, они будут отправлены на сервер для еще одной ТОЧНО такой же проверки.

Кто-то предложил мне создать класс Utility и поместить этот класс в пакет shared.

Посмотрите на этот код

В пакете 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 раза, как это?


person Tum    schedule 30.10.2013    source источник


Ответы (1)


GWT поддерживает проверку компонентов JSR-303 с помощью аннотаций, и одни и те же проверки могут использоваться как на стороне клиента, так и на стороне сервера. См. раздел проверки документа GWT.

person David Levesque    schedule 30.10.2013
comment
мне все еще нужно проверить на стороне клиент + сервер. Но для моего вопроса я ищу структуру или дизайн, который и клиент, и сервер могут использовать один и тот же класс проверки. Этот класс может принимать данные от клиента и сервера, выполнять некоторую проверку и возвращать результат, который может быть передан клиенту или серверу. - person Tum; 30.10.2013
comment
Вы должны проверить клиент + сервер, но это один и тот же код проверки для обоих. - person David Levesque; 30.10.2013
comment
@ Мин Хай, это правильный ответ. Пожалуйста, изучите проверку JSR-303. - person otonglet; 31.10.2013
comment
У меня есть только 10,20 простых полей для проверки, зачем нужен дополнительный пакет? я ненавижу дополнительный пакет, потому что он требует много головной боли по настройке, и если я не делаю правильно, то это пустая трата времени. Если я все делаю правильно, мне нужно научиться им пользоваться, а это еще одна головная боль, и на это нужно время. Программирую дома, помочь некому. - person Tum; 31.10.2013
comment
JSR-303 потребует некоторой настройки, но для этого потребуется меньше кода. Если вы хотите создать свои собственные общие (клиентские и серверные) классы проверки, вы можете это сделать, но для этого потребуется много кода. Однако я настоятельно рекомендую вам воспользоваться советом Дэвида. GWT предоставляет вам такие инструменты, как проверка на стороне клиента с использованием аннотаций JSR-303 для ваших POJO. Вы можете комбинировать платформу проверки с редакторами GWT для мощной проверки формы. На стороне сервера некоторые фреймворки, такие как RestEasy, автоматически обработают для вас проверку JSR-303. - person spg; 11.11.2013