Java c:forEach不工作
我对taglib方法c:forEach有一个问题。我想从servlet类中获得一个语言列表,并用c:forEach在jsp页面上显示它。但它只是不显示任何内容^^一个空的select标记 jsp文件中的for-each循环(我有taglib导入,并且已经在没有c:out的情况下进行了尝试):Java c:forEach不工作,java,jsp,web,Java,Jsp,Web,我对taglib方法c:forEach有一个问题。我想从servlet类中获得一个语言列表,并用c:forEach在jsp页面上显示它。但它只是不显示任何内容^^一个空的select标记 jsp文件中的for-each循环(我有taglib导入,并且已经在没有c:out的情况下进行了尝试): 。。。 ... 我的Servlet类(它是一个Servlet,因为我也必须用它做一些表单提交工作): 。。。 //可供选择的语言列表 列出输入; ... //从数据库中查询语言 公共列表getInputL
。。。
...
我的Servlet类(它是一个Servlet,因为我也必须用它做一些表单提交工作):
。。。
//可供选择的语言列表
列出输入;
...
//从数据库中查询语言
公共列表getInputLangs(){
试一试{
String query=“从国家/地区选择不同的语言”;
ResultSet result=DbConnection.read(查询);
while(result.next()){
add(result.getString(“lang”));
}
}捕获(SQLE异常){
System.err.println(“无法从DB获取语言”);
}
返回输入;
}
我做错了什么^^
顺便说一句,它适用于纯java:
<%
RegistrationServlet reg = new RegistrationServlet();
for (String lang : reg.getInputLangs()) {
%>
<option><%=lang%></option>
<%
}
%>
但据我所知,这是jsp文件中的禁忌;)
${registrationServlet.inputLangs}
表示:
- 在页面范围中查找名为“registrationServlet”的属性
- 如果未找到,请在请求范围中查找名为“registrationServlet”的属性
- 如果未找到,请在会话范围中查找名为“registrationServlet”的属性
- 如果未找到,请在应用程序范围中查找名为“registrationServlet”的属性
- 如果找到,对找到的对象调用
getInputLangs()
RegistrationServlet
实例,则此表达式的计算结果将始终为null
。如果保留此设计,servlet的doGet()
(或doPost()
)方法应具有以下行:
request.setAttribute("registrationServlet", this);
但如果有了它会干净得多
request.setAttribute("inputLangs", getInputLangs());
在JSP中:
<c:forEach var="lang" items="${inputLangs}">
类路径上是否有正确的JSTL jar文件? 在您的例子中,/WEB-INF/lib中的JSTL 1.1 JAR文件
好吧,由于您没有真正说明问题所在(错误消息、未显示任何内容、显示了与预期不同的内容等),我无法真正告诉您,但很可能您忘记了在jsp顶部添加taglib导入声明。好的,这真的很有帮助,谢谢。所以,在我第一次提交之后,它现在起作用了。显然是因为这样会执行doPost()。是否有一种称为onload of the jsp页面的servlet方法?否。在设计良好的MVC体系结构中,servlet(控制器)准备视图(jsp)所需的所有数据,并将它们存储在请求属性中。然后它转发到视图,视图只从请求属性中获取它必须显示的内容。这就是我在回答的最后建议做的。学到了很多,谢谢。它现在可以工作了,首先调用servlet,然后转发到jsp:)!
request.setAttribute("inputLangs", getInputLangs());
<c:forEach var="lang" items="${inputLangs}">