Значение, переданное с помощью request.setAttribute(), недоступно с помощью request.getParameter().

Я присваиваю строковой переменной значение при нормальном выполнении кода, но если произойдет исключение, я присвою ей другое значение, проблема в том, что в блоке 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);
}

а вот функция forword

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

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


person palAlaa    schedule 03.12.2010    source источник
comment
Прочитайте это: en.wikipedia.org/wiki/Don't_repeat_yourself Многое может быть устранено уже.   -  person BalusC    schedule 03.12.2010
comment
Это не скомпилируется. Вы определяете page локально перед блоком try, а затем снова переопределяете его внутри блока try. Это приведет к ошибке компиляции, поэтому код, который вы нам дали, бесполезен для демонстрации проблемы.   -  person Mark Peters    schedule 03.12.2010
comment
@ Марк Питерс, я переписываю свой код здесь, мой код очень большой, я просто даю вам снимок проблемы, с которой я столкнулся, но спасибо за это примечание.   -  person palAlaa    schedule 03.12.2010


Ответы (2)


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

So:

request.setAttribute("foo", foo);

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

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

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

person BalusC    schedule 03.12.2010
comment
@BalusC - ты прав, но я столкнулся с другой проблемой: я использую метод forward() для обработки как страницы параметров, которая отправляется из jsp в сервлет, так и страницы атрибутов из сервлета в jsp, и обеих для пересылки на предполагаемую страницу !!! когда я делаю request.getAttribute() в форме параметров прямого метода, jsp имеет значение null. Это хорошая идея, чтобы сделать 2 метода для forward()? - person palAlaa; 03.12.2010
comment
Нет, просто передайте и получите доступ к нему как к атрибуту запроса. Не усложняйте/дублируйте вещи. - person BalusC; 03.12.2010
comment
@BalusC - можем ли мы передать значения из jsp в сервлет в качестве атрибута? Поскольку я буду отправлять значения из полей ввода. - person palAlaa; 03.12.2010
comment
Вы можете просто получить доступ к параметрам как к параметрам. Атрибуты доступны в JSP EL как ${page}. Я бы посоветовал изучить основы JSP/Servlet с помощью достойной книги/учебника. Начните здесь: stackoverflow.com/tags/servlets/info - person BalusC; 03.12.2010
comment
@BalusC- проблема в том, что до сих пор я использую ‹%%› на страницах jsp, но теперь я решил изучить JSTL и EL, поскольку в JSTL много возможностей. - person palAlaa; 03.12.2010
comment
Просто выполните request.getAttribute() в скриптлете. Это ничем не отличается от кода сервлета. - person BalusC; 03.12.2010
comment
@BalusC- мы говорим о разных вещах, в предыдущем комментарии я спрашиваю вас, как я могу отправлять значения из jsp в сервлеты в качестве атрибута, а не как получать значения из сервлета в jsp !! - person palAlaa; 03.12.2010
comment
Для JSP в Servlet просто отправьте их обычным способом через поля ввода. Вам не нужно ничего менять. Они доступны как параметры запроса. Для Servlet to JSP используйте атрибуты запроса. Еще раз, просмотрите достойное руководство по JSP/Servlet, чтобы понять основные концепции. - person BalusC; 03.12.2010
comment
@BalusC- Я решаю проблему, используя тот же метод для получения параметров для jsp и получения атрибутов из сервлетов, посмотрите, что я сделал: String page = (String) request.getAttribute (page); если (страница == null) страница = request.getParameter (страница); - person palAlaa; 03.12.2010
comment
@BalusC - много-много-много спасибо за вашу помощь и ооооочень терпеливое - person palAlaa; 03.12.2010

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

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

person jzd    schedule 03.12.2010
comment
На самом деле это не ответ, а комментарий. И это уже упоминалось в комментарии :) - person BalusC; 03.12.2010
comment
Видя, что код, который он опубликовал, не был фактическим кодом, который он запускал, это могло быть частью или полным решением. Я начал отвечать на это до того, как появились какие-либо комментарии, и не увидел комментарий Марка. - person jzd; 03.12.2010