如何在struts中过滤列表

时间:2012-12-19 17:28:59

标签: java jsp struts

我创建并传递给我的jsp的数组列表是

ArrayList countryList = new ArrayList();
countryList.add(new CountryData("1", "USA"));
countryList.add(new CountryData("2", "Canada"));
countryList.add(new CountryData("3", "Mexico"));
countryList.add(new CountryData("4", "Canada"));

在jsp页面上我正在使用

显示
<html:select property="country" >
<html:option value="0">Select Country</html:option>
<html:optionsCollection name="InputForm" property="countryList"
label="countryName" value="countryId" />
</html:select>

是否可以过滤jsp上的列表以仅在下拉列表中显示加拿大

2 个答案:

答案 0 :(得分:0)

最简单的方法是将CountryData列表序列化为JSON(使用众多免费的Java JSON库之一),并使用JavaScript过滤国家/地区阵列。

在Java中:

String countryListAsJSON = serialize(countryList);
request.setAttribute("countries", countryListAsJSON);

在JSP中:

<script>
    var countries = ${countries};
    //...
</script>

将转换为以下HTML代码:

<script>
    var countries = [{"countryId": "1", "countryName": "USA"}, {"countryId": "2", "countryName": "Canada"}, ...];
    //...
</script>

答案 1 :(得分:0)

是的,这是可能的,有几种方法可以做到:

  1. 使用scriptlet: (假设所有必需的包含指令都已完成)

    <%= List<CountryData> newList = new ArrayList<CountryData>(); %>
    <html:select property="country" >
    <html:option value="0">Select Country</html:option>
    <% 
         for(CountryData cd:countryList) {
             if("Canada".equals(cd.getCountry())) {
                 newList.add(cd);
             }
         }
    %>
    <html:optionsCollection name="InputForm" property="newList" label="countryName" value="countryId" />
    </html:select>
    
  2. 使用JSTL c:forEachc:if标记过滤掉列表中所有不需要的元素

  3. 使用专门开发的自定义标记过滤掉列表中除“加拿大”以外的所有国家/地区