Как извлечь список значений из определенного выпадающего списка в веб-форме, используя java / jsp - PullRequest
0 голосов
/ 19 августа 2011

Я хочу извлечь все значения для определенного выпадающего списка в веб-форме.

В исходном коде этой веб-формы соответствующий код для данного раскрывающегося списка приведен ниже -

<div align="left"><select name="CATEGORY_ID">
<option label="[Top]" value="0" selected="selected">[Top]</option>
<option label="|___Arts &amp; Humanities" value="1">|___Arts &amp; Humanities</option>
<option label="|&nbsp;&nbsp;&nbsp;|___Art History" value="2">|&nbsp;&nbsp;&nbsp;|___Art History</option>
----many more values----
<option label="|&nbsp;&nbsp;&nbsp;|___Work" value="453">|&nbsp;&nbsp;nbsp;|___Work</option>

</select>
</div>

Я хочу извлечь как фактические значения (т.е. option ... value = ""), так и значение, отображаемое на экране (т.е. option label = "") ... ... Это можно сделать в JSP / Java? И в идеале сделано с использованием только классов, поддерживаемых Google App Engine? (Даже если вы можете предложить способ сделать это, но не уверены, поддерживается ли этот способ Google App Engine для Java, даже тогда, пожалуйста, предложите ваш метод ...)

Ответы [ 2 ]

0 голосов
/ 20 августа 2011

Для этого проще всего использовать анализатор HTML.Я не думаю, что GAE поставляется с кем-либо.Но вы должны быть в состоянии бросить один в вашем /WEB-INF/lib.Я бы предложил взять за эту работу Jsoup .После этого вы сможете получить все параметры <select name="CATEGORY_ID"> внешнего веб-сайта следующим образом в сервлете:

Map<String, String> options = new LinkedHashMap<String, String>();
Document document = Jsoup.connect("http://other.com/some.html").get();

for (Element option : document.select("select[name=CATEGORY_ID] options")) {
    options.put(option.attr("value"), option.text());
}

request.setAttribute("options", options);
request.getRequestDispatcher("/WEB-INF/some.jsp").forward(request, response);

, а затем в JSP отобразить его следующим образом:

<select name="category">
    <c:forEach items="${options}" var="option">
        <option value="${option.key}"><c:out value="${option.value}" /></option>
    </c:forEach>
</select>

Кстати, атрибут label не нужен, так как это глупый собственный атрибут MSIE.Это тело элемента <option>, которое должно отображаться как видимая метка.

0 голосов
/ 19 августа 2011

Вы можете легко добиться этого, анализируя форму, в простейшей форме вы можете сделать это с помощью методов java.lang.String, получить подстроку между тегами «select», затем получить подстроки между тегами «option» и затем проанализировать каждая строка, чтобы найти значения для «label =» и «value =». Я думаю, вы можете попробовать некоторые библиотеки синтаксического анализа для HTML тоже.

...