0

我想提取 Web 表单中特定下拉列表框的所有值。

在此 Web 表单的源代码中,此特定下拉列表的相关代码如下 -

<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 for Java 是否支持该方法,即使如此,请建议您的方法...)

4

2 回答 2

0

您可以通过解析表单轻松实现这一点,以最简单的形式,您可以使用 java.lang.String 方法,获取“select”标签之间的子字符串,然后获取“option”标签之间的子字符串,然后将每个字符串解析为查找“label=”和“value=”的值。我想你也可以尝试一些 html 解析库。

于 2011-08-19T10:55:58.040 回答
0

最简单的是为此使用 HTML 解析器。我不认为GAE 附带任何一个。但是你应该可以在你的/WEB-INF/lib. 我建议抓住Jsoup来完成这项工作。然后,您应该能够<select name="CATEGORY_ID">在 servlet 中获取外部网站的所有选项,如下所示:

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>它是将元素的主体显示为可见标签。

于 2011-08-19T23:19:40.327 回答