在jsp中复制局部变量

时间:2014-04-28 23:56:23

标签: java mysql jsp servlets duplicates

在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次,等等。我也尝试过使用元标记不缓存页面,因为这是我怀疑发生的事情 - 没有运气。

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>