Странный вывод Throwable getMessage () - PullRequest
2 голосов
/ 12 марта 2010

Привет, у меня ниже псевдокод с исключениями вроде этого

throw new MyException("Bad thing happened","com.stuff.errorCode");

, где MyException расширяет класс Exception. Ниже описано, как я обрабатываю исключение

 ActionMessages errors = new ActionMessages();
if(ex.getErrorCode() != null && !"".equals(ex.getErrorCode()))
error = new ActionMessage(ex.getErrorCode()); // com.stuff.errorCode is the errorCode
else
error = new ActionMessage(ex.getMessage()); //"Bad thing happened" is error message
errors.add(ActionMessages.GLOBAL_MESSAGE, error);
//errors.add(Globals.MESSAGE_KEY, error );
saveErrors( requ, errors );
return (mapping.findForward(nextScreen));

Теперь на экране пользователя появляется сообщение

??? en_US. Что случилось ???

Я использую Struts 1.2.4 и изучаю его исходный код, но любой указатель будет высоко оценен.

Ответы [ 3 ]

2 голосов
/ 12 марта 2010

Редактировать: этот ответ был написан до существенного изменения вопроса.

Элемент "??? en_US" должен быть откуда-то еще (возможно, веб-фреймворк, который вы используете для печати сообщения), потому что Exception сам по себе не выполняет поиск.

Скомпилируйте этот код:

public class MyException extends Exception {
  public MyException(String msg, String sErrorCode) {
    super(msg);
    // ignore sErrorCode
  }
}

public class MyExceptionTest {
  public static void main(String[] args) {
    System.out.println(new MyException("foo", "bar").getMessage());
  }
}

и запустите MyExceptionTest, и вы увидите простое «foo» в качестве вывода (как и ожидалось).

1 голос
/ 12 марта 2010

Чтобы ActionMessage не пытался интерпретировать ваше буквальное сообщение как ключ, используйте этот конструктор :

error = new ActionMessage(ex.getMessage(), false);

Параметр boolean указывает, будет ли параметр String интерпретироваться как код для поиска (true) или как буквальное сообщение (false).

0 голосов
/ 12 марта 2010

Java ищет ресурсы приложения для локализованной версии вашего сообщения об ошибке.

Вот что такое en_US ??? дело в том По какой-то причине он считает, что вы ссылаетесь на ключ "Произошла плохая вещь" и ищете локализованное (т.е. переведенное) сообщение.

Почему?

Пока не уверен. Не могли бы вы опубликовать весь класс MyException?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...