Как получить параметр с несколькими значениями, используя библиотеку сервлетов из нескольких форм O'Reilly? - PullRequest
1 голос
/ 16 мая 2011

Я использую многочастную библиотеку форм O'Reilly для сервлетов , чтобы иметь возможность обрабатывать загрузку файлов. Я нашел это полезным и реальным, но я столкнулся с проблемой, которую не могу решить. Речь идет о параметрах с несколькими значениями (например, множественный выбор). Я анализирую параметры, как показано ниже:

List<Units> unitsParams = new ArrayList<Units>();
while (mp != null && (part = mp.readNextPart()) != null) {
    if (part.isFile()) {//Es un fichero.
        FilePart filePart = (FilePart) part;
        if (filePart.getContentType().equals("image/jpeg")) {
            InputStream pis = filePart.getInputStream();
            // It's a file, handle it
        }
    } else if (part.isParam()) { // Es un parametro
        // Handle the actual params
        String namePar = part.getName();
        ParamPart paramPart = (ParamPart) part;
        String valorPar = paramPart.getStringValue();
        boolean fin = null == valorPar;
        if (!fin) {
            if (namePar.equals("id")) {
                id = valorPar;
            } else if (namePar.equals("name")) {
                orgName = valorPar;
            } else if (namePar.equals("unitSelect")) {
                unitsParams.add(valorPar);
            }
        }
    }

Для параметра с несколькими значениями я думал, что он будет повторяться (посылать разные части) столько раз, сколько количество значений для параметра unitSelect я отправлял, но я могу получить только одно значение.

Кто-нибудь использовал эту библиотеку и сталкивался с этой проблемой? Я стараюсь не менять библиотеку, так как загрузка файла работает отлично, и очень сложно изменить значительную часть кода для нескольких сервлетов.

Любые предложения приветствуются.

Спасибо.

1 Ответ

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

Я не использую O'Reilly multipart / form-data parser по той причине, что Apache Commons FileUpload более широко используется и все еще активно поддерживается.

Однако после проверки Javadocs и примеров кажется, что вам лучше использовать класс MultipartRequest вместо того, чтобы собирать параметры. Он предлагает getParameter() и getParameterValues() методы.

MultipartRequest multipartRequest = new MultipartRequest(request, saveDirectory);
File file = multipartRequest.getFile("file");
String id = multipartRequest.getParameter("id");
String name = multipartRequest.getParameter("name");
String[] unitSelect = multipartRequest.getParameterValues("unitSelect");
// ...
...