Разбор строковой переменной с помощью jstl

Вот моя проблема.

Мне нужно настроить процесс, желательно с jstl / jsp, который в зависимости от того, что клиент вводит в параметр URL-адреса, будет возвращен определенный URL-адрес с теми же параметрами, переданными и открытыми с помощью всплывающей функции javascript.

Проблема, с которой я столкнулся, заключается в том, что оператор выбора не находит один из параметров, если он не является одним из начальных параметров. (Теперь вы думаете, а?)

Список параметров, которые передает клиент, выглядит так ...

?name=personsname&email=personsemail&tmplatecde=7&legalid=20266998&photoURL=%2Favmedia%2Fweb%2Findex%2F25505893822%2EJPG&agentNumber=047666&FWSType=FR&des=,+CLU%AE,+ChFC%AE&postto=thenetwork.nmfn.com&agentnumber=047666&formname=FWSContactForm2&attr=FRSite

Из этого параметра мне действительно нужно только имя формы. Однако, если я вставлю строку запроса таким образом, чего и ожидает клиент, он не найдет имя формы. Переместите параметр formname перед параметром name, он работает.

В моей компании мы создали настраиваемый тег JSP, который может просто взять эту строку запроса и прикрепить ее к указанному URL-адресу, но для определения этого URL-адреса мне также нужно проверить, чему соответствует имя формы.

Есть ли у кого-нибудь идеи подходящего способа синтаксического анализа строки, чтобы получить это значение имени формы?

Пока что у меня есть код, который имеет значение для этой проблемы:

<c:choose><c:when test='${param.formname == "FWSContactForm2"}' >

Любая помощь будет принята с благодарностью.


person Brent    schedule 19.08.2010    source источник
comment
Попробуйте сместить параметр имени формы влево и протестируйте, пока он не заработает. Может быть, символы в одном из других параметров что-то напортачили?   -  person Stian    schedule 20.08.2010
comment
К тому времени, когда вы дойдете до JSTL и своей страницы JSP, строка запроса уже будет разделена контейнером сервлета. Вы должны отлаживать, выясняя, каковы все параметры на самом деле, и это может сказать вам, какая часть URL-адреса является синтаксически недопустимой и приводит к тому, что контейнер сервлета пропускает конечные параметры.   -  person Pointy    schedule 20.08.2010


Ответы (1)


Он должен работать нормально. Однако эта строка запроса содержит специальный символ, который закодирован в URL-адресе с использованием ISO-8859-1, %AE (зарегистрированный знак ®). Возможно, servletcontainer декодирует его, используя неправильную кодировку, и одна ошибка следовала за другой. Удалите эту %AE часть и повторите тест. Если это сработает, я бы исследовал конфигурацию кодирования URL-адресов рассматриваемого контейнера сервлетов. С другой стороны, если у вас есть полный контроль над страницей, которая должна отправлять эту строку запроса, вы также можете установить кодировку ответа такую ​​же, как то, что использует servletcontainer. Это сломало бы меньше вещей.

person BalusC    schedule 20.08.2010
comment
Спасибо! Обладая этой информацией, я смог выяснить, как решить проблему, используя нашу настраиваемую строковую переменную запроса и просканировав ее на предмет параметра formname. Это проще, чем возиться с уже работающим контейнером сервлетов. - person Brent; 20.08.2010