Динамическая форма, с или без multipart / form-data - PullRequest
2 голосов
/ 29 апреля 2011

Я проектирую простую инфраструктуру CRUD в Java, где на моей HTML-странице есть динамическая форма (2 с multipart для создания и обновления с загрузкой файлов и 1 без fileupload и multipart для удаления).На стороне сервера модулятор запросов проверяет все параметры, используя request.getParameterMap();, и проверяет, используя этот скрытый тип ввода <input type="hidden" name="returntype" value="Create">, является ли это операцией создания, обновления или удаления.Исходя из этого, он будет вызывать необходимые обработчики.

Примечание. Для моего энктипа и кодировки формы установлено значение multipart / form-data Примечание. Мой paramMap.size () возвращает здесь 0и returnType становится нулевым, и поэтому я получаю исключение нулевого указателя.

Если я вообще не использую enctype и кодировку, она работает нормально, но опять же, загрузка моего файла дает мне исключение, что тип кодировки должен быть multipart / form-data .Может ли кто-нибудь помочь мне таким образом, чтобы я мог иметь динамическую форму, с помощью которой я могу создать CRUD?или почему я не могу использовать request.getParameterMap(); с multipart / form-data Спасибо:)

Ниже приведен код модулятора запроса

public String identifyNow()throws ServletException, java.io.IOException
{
    UploadXmlAgent uploadAgent;
    paramMap=request.getParameterMap();
    if (paramMap == null)
        throw new ServletException(
          "getParameterMap returned null in: " + getClass().getName());

    iterator=paramMap.entrySet().iterator();
    System.out.println(paramMap.size());
    while(iterator.hasNext())
    {
        Map.Entry me=(Map.Entry)iterator.next();
        if(me.getKey().equals("returntype"))
        {
            String[] arr=(String[])me.getValue();
            returnType=arr[0];
        }
    }

    //Identified based on returnType, instantiate appropriate Handler

    if(returnType.equals("Create"))
    {
        uploadAgent=new UploadXmlAgent(realPath,request,paramMap);
        uploadAgent.retrieveXml();
                    //SOME MORE OPERATIONS  
        return uploadAgent.uploadXml();
    }
    else if(returnType.equals("Update"))
    {
        System.out.println("Update");
        uploadAgent=new UploadXmlAgent(realPath,request,paramMap);
        uploadAgent.retrieveXml();
                    //SOME MORE OPERATIONS
        return uploadAgent.uploadXml();
    }
    else if(returnType.equals("Delete"))
    {
        //SOME OPERATIONS
    }
    return returnType;
}

Ответы [ 3 ]

2 голосов
/ 03 мая 2011

Согласно комментарию к другому ответу:

Могу ли я использовать request.getParameterMap(); каким-либо образом с multipart?

Если это ваше единственное требование, то просто создайте Filter, который выполняет синтаксический анализ и подготавливает карту параметров запроса со всеми этими проанализированными составными элементами, чтобы вы могли продолжать использовать getParameter(), getParameterMap() и обрабатывать Обычный способ в JSP / Servlet. Вы можете найти полный пример такого фильтра здесь .

2 голосов
/ 29 апреля 2011

возможно вам стоит взглянуть на Commons IO FileUpload .

Чтобы понять, какая форма отправлена, вы можете использовать скрытое поле ввода

 <input type="hidden" name="formAction" value="uploadSomething">

Затем вы можете использовать это в своем сервлете для выполнения действий в зависимости от вашей формы

String act = request.getParameter("formAction");
if(act.equals("uploadSomething")
{ 
// EDIT
if(ServletFileUpload.isMultipartContent(request))
{

// Create a factory for disk-based file items
FileItemFactory factory = new DiskFileItemFactory();

// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);

// Parse the request
List /* FileItem */ items = upload.parseRequest(request);
}
}

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

0 голосов
/ 02 мая 2011

Привет, мне удалось это решить.Я использую 2 запроса и переменную сеанса.

1-й запрос на отправку формы без multipart и сохранение типа запроса в переменной сеанса.

после отправки 1-го запроса перейдите на 2-й запрос той же формы, но на этот разсоставьте и проверьте значение переменной вашего сеанса и выполните соответствующий обработчик.

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