2016-03-03 4 views
1

Я пишу класс действия, в котором я хочу печатать ошибки, используя Struts2. На моей странице JSP у меня выпало падение, и у меня в нем 10 состояний. Когда я развертываю приложение, всегда появляется полевая ошибка для Null, даже не щелкая ни одной кнопкой. Я хочу, чтобы эта ошибка была напечатана в случае, если пользователь не выбрал какое-либо состояние из раскрывающегося списка.Как проверить раскрывающийся список в Struts2

Класс действия:

public String modifyState() { 
     CatastropheDataTO catDataTo = new CatastropheDataTO(); 

     try { 
      catDataTo.setState(this.state); 
      catDataTo.setActive(Boolean.valueOf(this.active)); 
      catDataTo.setStartDate(this.startDate); 

      if(getState() != null || getActive() != null || getStartDate() != null) { 
       getCatastropheManager().updateCatastropheData(catDataTo); 
       addActionMessage(this.getErrorMessageFactory().generateMessage(Constants.ERROR_CODE_7).getMessageText()); 

      } else if(getState() == null){ 
       addFieldError("state", "Please select a state"); 
      } 

     } catch (Exception ex) { 
      addActionError(this.getErrorMessageFactory().generateMessage(Constants.ERROR_CODE_3028).getMessageText()); 
     } 
     return SUBMIT; 
    } 

Как-то getState() всегда нуль из-за которой "Please select a state" всегда показывают вверх, в то время как я хочу, чтобы это было напечатано, если пользователь непосредственно нажимает на кнопку отправки без выбора состояния ,

ответ

0

Просто используйте два действия (that can be two methods of the same Java class), первый для отображения страницы, второй для выполнения бизнеса, который должен быть выполнен после нажатия кнопки.

В вашем случае:

public String showStates() { 
    return SUCCESS; 
} 

public String modifyState() { 
    CatastropheDataTO catDataTo = new CatastropheDataTO(); 

    try { 
     catDataTo.setState(this.state); 
     catDataTo.setActive(Boolean.valueOf(this.active)); 
     catDataTo.setStartDate(this.startDate); 

     if(getState() != null || getActive() != null || getStartDate() != null) { 
      getCatastropheManager().updateCatastropheData(catDataTo); 
      addActionMessage(this.getErrorMessageFactory().generateMessage(Constants.ERROR_CODE_7).getMessageText()); 

     } else if(getState() == null){ 
      addFieldError("state", "Please select a state"); 
     } 

    } catch (Exception ex) { 
     addActionError(this.getErrorMessageFactory().generateMessage(Constants.ERROR_CODE_3028).getMessageText()); 
    } 
    return SUBMIT; 
} 

Тем не менее, ваш подход в обходе механизмов рамок, которые предоставляют вам несколько способов встроенных для выполнения валидации (validate(), XML, annotations ...).

Самый похожий на тот, который вы используете, - это метод validate(), который (чтобы предотвратить возникновение ранее возникшей проблемы снова, может применяться только к некоторому методу, а не ко всем методам действия класса, с . validateXXX() или @SkipValidation

результат будет что-то вроде:

@SkipValidation 
public String showStates() { // call this the first time 
    return SUCCESS; // or INPUT, or whatever 
} 

public void validate(){ 
    if(getState() == null){ 
     addFieldError("state", "Please select a state"); 
    } 
} 

public String modifyState() { 
    CatastropheDataTO catDataTo = new CatastropheDataTO(); 

    try { 
     catDataTo.setState(this.state); 
     catDataTo.setActive(Boolean.valueOf(this.active)); 
     catDataTo.setStartDate(this.startDate); 

     if(getActive() != null || getStartDate() != null) { 
      getCatastropheManager().updateCatastropheData(catDataTo); 
      addActionMessage(this.getErrorMessageFactory().generateMessage(Constants.ERROR_CODE_7).getMessageText()); 

     } 

    } catch (Exception ex) { 
     addActionError(this.getErrorMessageFactory().generateMessage(Constants.ERROR_CODE_3028).getMessageText()); 
    } 
    return SUBMIT; 
} 
+0

@Yousuf, вы возражаете upvoting ответ (если вам это нравится) и принять его (если он работал) Спасибо –

+0

я вижу? вы никогда не одобряли и не принимали ответа после 11 вопросов: | Есть ли причина за этим? Чтобы увеличить, нажмите стрелку вверх в верхнем левом углу ответа; чтобы принять, нажмите белый V, поворачивая его на зеленый. http://stackoverflow.com/tour –

Смежные вопросы