Я создал скрытый элемент формы
<form name="UploadImage" enctype="multipart/form-data" method="post" action="UploadImage">
<label>
</label>
<input name="imgUploadObjId" id="imgUploadObjId" value="52" type="hidden">
//rest of the form here
</form>
И я пытаюсь получить значение с этой строкой в сервлете (поскольку я сделал прежде):
int objId = Integer.parseInt(request.getParameter("imgUploadObjId"));
Но я получаю это (строка 33 является строкой выше):
java.lang. NumberFormatException: пустой указатель
java.lang. Integer.parseInt (Неизвестный Источник) java.lang. Integer.parseInt (Неизвестный Источник) web.objects. UploadImage.doPost(UploadImage.java:33) javax.servlet.http. HttpServlet.service(HttpServlet.java:637) javax.servlet.http. HttpServlet.service(HttpServlet.java:717)
Есть ли что-то другое о форме с enctype = "multipart/form-data"? Или можно ли видеть некоторую другую ошибку.
Сервлет анализирует параметры по умолчанию, используя кодировку application / x-www-form-urlencoded
. Однако кодировка multipart / form-data
не поддерживается в сервлетах до Servlet 3.0 . Все вызовы getParameter ()
возвращают null
.
В Servlet 3.0 вам следовало использовать HttpServletRequest # getParts ()
вместо того, чтобы получить все части запроса multipart / form-data
, включая поля нормальной формы. До Servlet 3.0 вы должны были использовать Apache Commons FileUpload для анализа запросов multipart / form-data
.См. Также следующий ответ для подробного примера обоих подходов: Как загрузить файлы на сервер с помощью JSP / Servlet?
Обратите внимание, что если вы не используете какой-либо
, тогда вы можете просто оставить кодировку подальше от
. Затем он будет по умолчанию application / x-www-form-urlencoded
.
Многокомпонентное кодирование не должно влиять на скрытые текстовые поля. Скорее всего, что-то другое. Можете ли вы опубликовать еще код HTML / сервлета?
Не уверен, что это помогает, но я использовал составные формы на страницах jsp, которые отправляются сервлету struts, и эти страницы имеют скрытые поля которые получены в моих классах Struts Action (завернутых в Struts ActionForm), поэтому я не думаю, что здесь есть что-то жесткое.
Вы пытались получить это значение в виде String и посмотреть, что на самом деле происходит?
Вы бы проверили сам код сервлета. Вы получаете запрос? Можете ли вы отладить приложение, чтобы увидеть, какие переменные присутствуют в среде, когда вы пытаетесь получить значение и проанализировать его.
На самом деле есть что-то другое.
request.getParameter
будет работать только для жестко заданных параметров URL, указанных в атрибуте action
элемента
. В вашем случае он не содержит.
Все остальные параметры будут включены в саму форму, которую вы должны обработать, непосредственно анализируя входной поток HTTP-запроса.
К счастью, вы не первый, и есть несколько хороших библиотек с открытым исходным кодом, которые позаботятся об этом.
Я использовал Apache FileUpload . Вы создаете синтаксический анализатор и передаете ему объект запроса, а затем выполняете итерацию по различным элементам. Одно из них будет вашим скрытым полем.