2015-04-21 5 views
2

Я пишу пользовательское сообщение ActionErrors для нашего приложения, чтобы отобразить конкретную ошибку при определенных обстоятельствах.Как проверить ActionErrors для конкретной ошибки?

public class ErrorForm extends ActionForm{ 
public ActionErrors validateForm(ActionMapping mapping, HttpServletRequest request){ 
errs.add(FORM_KEY_ACTION_TYPE, new ActionMessage(WebGlobals.CUSTOM_ERROR)); 
return errs; 
} 
} 

К сожалению, как наш код структурирован (и я предпочел бы не попытаться продать «давайте перестраивать четыре класса для одного небольшого изменения), то ErrorForm является родителем для нескольких других классов. И, кроме причин что я показал в своих фрагментах кода, проверка должна выполняться в классе ErrorForm.

Когда родительский класс завершает работу и возвращает дочернему классу ActionErrors, дочерний класс добавляет собственное сообщение об ошибке, как показано ниже.

public class ErrorThrowingForm extends ErrorForm { 
public ActionErrors postValidate(ActionMapping mapping, HttpServletRequest request) 
{ 
    ActionErrors errs = super.validateForm(mapping, request); 

    if (errs.size() > 0) 
    errs.add(WebGlobals.GENERAL_ERROR_KEY, new ActionMessage(WebGlobals.PROP_FIELD_ERROR)); 

return errs; 
} 
} 

Несмотря на то, что сообщение об ошибке было возвращено из родительского класса, отображается только сообщение об ошибке дочернего класса, и сообщение об ошибке родителя никогда не отображается. Поле формы, которое выдает ошибку проверки, отображает ! рядом с ним, но соответствующее сообщение Custom_Error не отображается.

Я хочу вернуть пользовательское сообщение об ошибке. И у меня нет возможности просто добавить эту ошибку в класс children.

Как определить, какие ошибки в моем сообщении ActionErrors, чтобы я мог проверить свою пользовательскую ошибку и вернуть ее, а не в зависимости от класса children?

Я уже пробовал просто удалять весь блок «if» и возвращать ошибки напрямую, поскольку они получены из метода validateForm, но когда я это делаю, сообщение об ошибке не отображается на странице, и я не делаю знаю, почему.

+0

Не могли бы вы объяснить немного подробнее * при валидации возвращается к тем формам, ... * –

+0

@RomanC Я добавил еще несколько деталей, которые, надеюсь, прояснит, что я говорю - я m, ссылаясь на то, что класс Child вызывает метод из родительского класса, который должен возвращать ActionErrors родительского класса, но никогда не отображает Custom_Message родительского класса при выдаче ошибки проверки. – Zibbobz

ответ

1

Родительская форма должна быть ребенком ValidatorForm на ваших условиях, что вам следует лучше понять. В дочерней форме вашего родителя вы должны добавить метод validate для вызова проверки. Затем в родительской реализации вы должны вызывать супер-метод framework в первом предложении, а затем вы можете добавлять сообщения об ошибках в ActionErrors, возвращаемые фреймворком. Надеюсь, вы это поняли.

public class ErrorForm extends ValidatorForm{ 
public ActionErrors validateForm(ActionMapping mapping, HttpServletRequest request){ 
ActionErrors errs= super.validate(mapping, request); 
errs.add(ActionErrors.GLOBAL_MESSAGE, new ActionMessage(WebGlobals.CUSTOM_ERROR)); 
return errs; 
} 
} 
+0

Я понимаю, но, к сожалению, я не могу этого сделать. Проверка должна выполняться в ErrorForm. Я не могу решить эту проблему, переключив два-идеальных, хотя это было бы. Я знаю, что это не очень полезно, но структура приложения сделает невозможным переключение между ними. – Zibbobz

+0

Я так не думаю, * Проверка должна быть выполнена в ErrorForm *. Разве вы не видите код? –

+0

По причинам, отличным от того, что я показал в своих фрагментах кода, проверка должна выполняться в классе ErrorForm. Простите, я не прояснил это. – Zibbobz

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