Действительно формируется с enctype = “multipart/form-data” проблемы причины, получающие доступ к скрытому полю

Я создал скрытый элемент формы

<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"? Или можно ли видеть некоторую другую ошибку.

5
задан BalusC 13 May 2010 в 15:19
поделиться

5 ответов

Сервлет анализирует параметры по умолчанию, используя кодировку 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 .

16
ответ дан 18 December 2019 в 06:34
поделиться

Многокомпонентное кодирование не должно влиять на скрытые текстовые поля. Скорее всего, что-то другое. Можете ли вы опубликовать еще код HTML / сервлета?

1
ответ дан 18 December 2019 в 06:34
поделиться

Не уверен, что это помогает, но я использовал составные формы на страницах jsp, которые отправляются сервлету struts, и эти страницы имеют скрытые поля которые получены в моих классах Struts Action (завернутых в Struts ActionForm), поэтому я не думаю, что здесь есть что-то жесткое.

Вы пытались получить это значение в виде String и посмотреть, что на самом деле происходит?

1
ответ дан 18 December 2019 в 06:34
поделиться

Вы бы проверили сам код сервлета. Вы получаете запрос? Можете ли вы отладить приложение, чтобы увидеть, какие переменные присутствуют в среде, когда вы пытаетесь получить значение и проанализировать его.

1
ответ дан 18 December 2019 в 06:34
поделиться

На самом деле есть что-то другое.

request.getParameter будет работать только для жестко заданных параметров URL, указанных в атрибуте action элемента . В вашем случае он не содержит.

Все остальные параметры будут включены в саму форму, которую вы должны обработать, непосредственно анализируя входной поток HTTP-запроса.

К счастью, вы не первый, и есть несколько хороших библиотек с открытым исходным кодом, которые позаботятся об этом.

Я использовал Apache FileUpload . Вы создаете синтаксический анализатор и передаете ему объект запроса, а затем выполняете итерацию по различным элементам. Одно из них будет вашим скрытым полем.

2
ответ дан 18 December 2019 в 06:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: