使用jstl遍历列表

时间:2013-11-19 18:56:43

标签: jsp jstl

我有一个班级LineGroup

public class LineGroup {

private List<String> lines = null;

public LineGroup() {
    lines = new ArrayList<String>();
}

public void addToList(String line) {
    lines.add(line);
}

public void clear() {
    lines.clear();
}

public List<String> getLines(){
    return lines;
}

public String getLine(int i) {
    return lines.get(i);
}

public int getLength() {
    return lines.size();
}
} 

在我的servlet中,我用数据填充它,将其设置为属性并返回main页面

request.setAttribute("list", lg);
request.getRequestDispatcher("/main.jsp").forward(request, response);

在主页面上,我想要读取列表中的所有数据并将其放入select选项中。但它不能像这样工作

<body>

<jsp:useBean id="list" class="beans.LineGroup" scope="request"></jsp:useBean>   

<form action="SevenServlet" method="POST">
    ПЕРВАЯ СТРОКА:<input name="from" type="text"/><br>
    ВТОРАЯ СТРОКА:<input name="to" type="text"/><br>
    <input type="submit" name="send" value="УДАЛИТЬ"/><br>

    <select name="deleted" disabled>
        <jstl:set var="end" value="${list.getLength}"/>
        <jstl:set var="begin" value="0"/>
        <jstl:forEach var="i" begin="begin" end="end" step="1">
            <option value="${i}">${list.getLine(i)}</option>
        </jstl:forEach>
    </select>

</form>
</body>

list获取数据并将其放入select选项的正确方法是什么?

2 个答案:

答案 0 :(得分:5)

你应该让它变得更加困难。

首先,您不需要使用jsp:useBean。 JSP EL使用反射,并在请求属性中查找它使用的bean。

并且您不需要指定迭代的开始和结束。但是你必须迭代一个Iterable,而你的bean不是。它包装的列表是可迭代的。所以你只需要:

<body>

<form action="SevenServlet" method="POST">
    ПЕРВАЯ СТРОКА:<input name="from" type="text"/><br>
    ВТОРАЯ СТРОКА:<input name="to" type="text"/><br>
    <input type="submit" name="send" value="УДАЛИТЬ"/><br>

    <select name="deleted" disabled>
        <c:forEach var="line" items="${list.lines}" varStatus="status">
            <option value="${status.index}">${line}</option>
        </c:forEach>
    </select>

</form>
</body>

请注意,我使用了JSTL核心库的标准c前缀。使用标准名称有助于实现可更改性和可维护性。

答案 1 :(得分:0)

试试这个:

<select name="deleted" disabled>
    <jstl:forEach items="${list.lines}" varStatus="line">
        <option value="${line.index}">${line.current}</option>
    </jstl:forEach>
</select>