我的 taglib 方法 c:forEach 有问题。我想从 servlet 类中获取语言列表,并使用 c:forEach 在 jsp 页面上显示它。但它只是什么都没有显示^^ 一个空的选择标签。
jsp 文件中的 for each 循环(我有 taglib 导入并且已经在没有 c:out 的情况下尝试过):
...
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
...
<c:forEach var="lang" items="${registrationServlet.inputLangs}">
<option><c:out value="${lang}"></c:out></option>
</c:forEach>
我的 Servlet 类(它是一个 servlet,因为我也必须用它来做一些表单提交):
...
// List of languages to choose from
List<String> inputLangs;
...
// Query the languages from the database
public List<String> getInputLangs() {
try {
String query = "SELECT DISTINCT Lang FROM country";
ResultSet result = DbConnection.read(query);
while (result.next()) {
inputLangs.add(result.getString("lang"));
}
} catch (SQLException e) {
System.err.println("Couldn't get languages from DB.");
}
return inputLangs;
}
我做错了什么?^^
顺便提一句。它适用于纯 Java:
<%
RegistrationServlet reg = new RegistrationServlet();
for (String lang : reg.getInputLangs()) {
%>
<option><%=lang%></option>
<%
}
%>
但据我所知,这在 jsp 文件中是行不通的;)
最佳答案
${registrationServlet.inputLangs}
的意思是:
getInputLangs()
因此,如果您尚未在任何范围内存储
RegistrationServlet
的任何实例,则此表达式将始终计算为 null
。如果保持这种设计,servlet 的 doGet()
(或 doPost()
)方法应该有以下几行:request.setAttribute("registrationServlet", this);
但它会更干净
request.setAttribute("inputLangs", getInputLangs());
并且,在 JSP 中:
<c:forEach var="lang" items="${inputLangs}">
关于java - :forEach not working,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12300979/