我有一个班级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
选项的正确方法是什么?
答案 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>