我有一个taglib方法c:forEach的问题.我想从servlet类中获取一个语言列表,并使用c:forEach在jsp页面上显示它.但它只显示^^一个空的选择标记.
对于jsp文件中的每个循环(我有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>
Run Code Online (Sandbox Code Playgroud)
我的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;
}
Run Code Online (Sandbox Code Playgroud)
我做错了什么?^^
BTW.它适用于纯java:
<%
RegistrationServlet reg = new RegistrationServlet();
for (String lang : reg.getInputLangs()) {
%>
<option><%=lang%></option>
<%
}
%>
Run Code Online (Sandbox Code Playgroud)
但据我所知,这是一个没有jsp文件;)
${registrationServlet.inputLangs} 手段:
getInputLangs()找到的对象因此,如果您尚未存储任何RegistrationServlet范围内的任何实例,则此表达式将始终求值为null.如果保留此设计,则servlet 的doGet()(或doPost())方法应包含以下行:
request.setAttribute("registrationServlet", this);
Run Code Online (Sandbox Code Playgroud)
但是拥有它会更加清洁
request.setAttribute("inputLangs", getInputLangs());
Run Code Online (Sandbox Code Playgroud)
并且,在JSP中:
<c:forEach var="lang" items="${inputLangs}">
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11084 次 |
| 最近记录: |