Значение, переданное с помощью request.setAttribute (), недоступно request.getParameter () - PullRequest
2 голосов
/ 03 декабря 2010

Я даю строковой переменной значение при обычном выполнении кода, но если произойдет исключение, я передам ему другое значение, проблема в том, что в блоке catch значение остается таким же, как я назначаю первым .

Вот мой код, сначала я присваиваю значение страницы «addUser» внутри блока try, а в catch я задаю ему значение «ErrorPage», я отправляю значение страницы в запросе http методу forword и внутри него я печатаю значение стр. Я вызываю ошибку в освобождении кода, и я хочу, чтобы он прошел через блок catch, и это происходит, но когда он отправляет значение страницы в функцию forword, значением страницы является «addUser», а не «ErrorPage», хотя я назначаю это на "ErrorPage" !!

String page = "addUser";

try {
    // ...

    request.setAttribute("page", page);
    forward(request, response);
} catch (SQLException e) {
    page = "ErrorPage";
    request.setAttribute("page", page);
    forward(request, response);
}

а вот функция слова

String page = request.getParameter("page");
System.out.println("page is " + page); // each time it prints addUSer

Может кто-нибудь помочь? и спасибо заранее.

Ответы [ 2 ]

8 голосов
/ 03 декабря 2010

Вы звоните request.getParameter() вместо request.getAttribute(), чтобы получить значение.Поскольку вы установили его как атрибут запроса, вы также должны получить его как атрибут запроса.

Итак:

request.setAttribute("foo", foo);

доступно только для

Object foo = request.getAttribute("foo"); // NOT getParameter().

.getParameter() только для параметров HTTP-запроса, которые можно указать в URL-адресе запроса или в полях ввода HTML-форм.

0 голосов
/ 03 декабря 2010

В дополнение к точке BalusC "

В вашем коде вы объявили две переменные" String page ". Это не скомпилируется. Я думаю, что параметр, который вы передаете запросу в catch, должен быть«другая» переменная страницы. Но это трудно сказать, так как это неверный пример.

...