Как установить переменную сессии - PullRequest
0 голосов
/ 20 августа 2009

Я хочу установить текущий объект формы в качестве параметра сеанса перед отправкой формы. Возможно ли это?

<html>
<head>
Title 
</head>
<body>
<FORM method="test" name="test" enctype="multipart/form-data" action="sample.jsp" >
<select name="test" id="test"> 
<option>1</option>
<option>2</option>
</select>
<input type="submit" value="Submit">
</form>
</body>
</html>

Я хочу установить опцию выбора test в сеансе перед отправкой формы. Это возможно. Я не могу использовать запрос, поскольку в многочастных реализациях есть некоторые недостатки.

Ответы [ 3 ]

2 голосов
/ 05 декабря 2009

Я не могу использовать запрос, поскольку в многочастных реализациях есть некоторые недостатки.

Тогда ваша настоящая проблема в том, что вы используете плохую реализацию. Кодировка запроса multipart/form-data по умолчанию не поддерживается API сервлета, вы ничего не увидите на карте параметров запроса. Чтобы получить загруженный файл и другие параметры запроса, вам нужно проанализировать InputStream из HttpServletRequest самостоятельно. Но, к счастью, есть широко используемый API, который может взять на себя драгоценную и утомительную работу из ваших рук: Apache Commons FileUpload . На их домашней странице вы можете найти множество примеров кода и важные советы и рекомендации в разделах Руководство пользователя и Часто задаваемые вопросы . Прочитайте их внимательно. По сути, вам просто нужно получить InputStream из объекта FileItem и записать его на любой OutputStream на свой вкус, используя обычный Java IO способ. Для этого вы даже можете использовать сокращение FileItem#write().

При необходимости вы также можете написать Filter, который использует Apache Commons FileUpload под капотом и проверять каждый запрос, если он равен multipart/form-data, и если это так, затем поместить параметры обратно в карту параметров запроса с помощью Объединяет FileUpload и помещает загруженные файлы (или исключения) в качестве атрибутов запроса, чтобы в конечном итоге это стало немного более прозрачным в вашем коде сервлета. Вы можете найти здесь базовый пример, чтобы получить идею.

Подводя итог: не придумывайте обходных путей / хаков, чтобы "исправить" эту проблему Конечно, не используйте Ajax для установки параметров запроса в сеансе, пока они не будут отправлены на сервер. Просто используйте правильное решение для проблемы. Используйте хороший multipart/form-data парсер.

Надеюсь, это поможет.

0 голосов
/ 20 августа 2009

Вы можете использовать Ajax для общения с сервером. Я не понимаю, если вы хотите, чтобы все формы в сеансе или просто значение для тестовой комбинации ?! Если это просто значение для тестовой комбинации, вы можете получить ее со страницы и отправить ее асинхронно (когда захотите) на сервер для какого-либо действия, которое получает запрос, извлекает тестовое значение и сохраняет его в сеансе. Он будет там, когда вы отправите форму обычным способом.

Использование Ajax - это решение, но оно сложное для чего-то, что может быть простой операцией. Как говорили другие, это не очень хорошая идея.

Зачем вам это поведение? Что именно вы хотите сделать?

0 голосов
/ 20 августа 2009

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

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