在java web项目中重新加载index.jsp
页面时,我遇到了一个奇怪的错误。
<%
// index.jsp
// imports
String teams = Init.getTeams();
%>
<!-- default html content -->
<select class="select">
<option value="0" selected="selected">Choose Home Team</option>
<%= teams %>
</select>
<!-- default html content -->
所以我从这个java方法调用Init.getTeams()
:
public static String getTeams() {
String s = "";
ArrayList<Team> teams = new ArrayList<Team>();
teams = MySQLConnection.getTeams();
for (Team t : teams) {
s += "<option value='" + t.getId() + "'>" + t.getName() + "</option>";
}
return s;
}
(连接到我编写的MySQLConnection类以从数据库中检索值)。它会返回这样的东西:
<option value='1'>Royals</option>
<option value='2'>Red Sox</option>
<option value='3'>Athletics</option>
<option value='4'>Tigers</option>
<option value='5'>Rays</option>
<option value='6'>Angels</option>
...并正确填充选择框。问题是,当我重新加载页面时,它会复制返回的字符串,并且所有<option>
都是重复的。为什么会这样?
编辑:可能值得注意的是我正在运行apache tomcat服务器,当重新启动时,它会重置并在第一次显示页面时显示1次,第二次显示2次,等等。我也尝试过使用元标记不缓存页面,因为这是我怀疑发生的事情 - 没有运气。
答案 0 :(得分:0)
我通过将<%!
放在index.jsp
页面的最开头,替换<%
来解决此问题。我仍然不明白为什么这有效,但确实如此。
答案 1 :(得分:0)
小建议:如果可以,请为每个使用JSTL核心标记库。它将使代码更简单明了,更不容易出错。你甚至不需要实现getTeams方法,因为访问器使用了前进。
/* Somewhere in declarations part */
<%@taglib prefix="core_rt" uri="http://java.sun.com/jstl/core_rt"%>
...
/* inside select block */
<option value="0" selected="selected">Choose Home Team</option>
<core_rt:forEach items="${teams}" var="team">
<option value="${team.getId()}">${team.getName}</option>
</core_rt:forEach>