Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java c:forEach不工作_Java_Jsp_Web - Fatal编程技术网

Java c:forEach不工作

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

我对taglib方法c:forEach有一个问题。我想从servlet类中获得一个语言列表,并用c:forEach在jsp页面上显示它。但它只是不显示任何内容^^一个空的select标记

jsp文件中的for-each循环(我有taglib导入,并且已经在没有c:out的情况下进行了尝试):

。。。
...
我的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}">