我有一个Enum类,它存储了10种不同材料的名称和一些相关数字。 在我的HTML页面中,我想通过下拉列表选择一种材料。因此,我通过JSTL迭代它们。我曾经有过一个文章,但我现在更换了它。这是我的代码:
的Servlet
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
HttpSession session = request.getSession();
if (session.getAttribute("materialArray") == null) {
session.setAttribute("materialArray", Material.values());
}
request.getRequestDispatcher("/jsp/input.jsp").forward(request, response);
}
JSP页:
{...}
<h2>
<fmt:message key="input.label.material" />
</h2>
<select name="s_material" id="s_material">
<c:set var="MaterialEnum" value="${materialArray}" />
<c:forEach items="${MaterialEnum}" var="material">
<option value="${material}"><c:out
value="${material.description}"></c:out></option>
</c:forEach>
</select>
{...}
问题:当我在eclipse中单击“在服务器上运行项目”并访问Chrome中的URL时,它可以正常工作。
但是当我将项目导出到WAR文件并将其部署在服务器(相同的tomcat版本,不同的机器)上时,下拉列表不会填充,我得到Material.values()
的NullPointerException。此外,当我在eclipse实习生浏览器中查看它时,材料下拉菜单未填充。 (我在System.out.println()
中使用了doGet()
来检查它是否有效,它只在通过Chrome访问网页时打印材料。在内部浏览器中,它只打印任何内容。)
为什么?有没有办法绕过这些枚举方法.values()
和.valueOf()
(后来我用它来处理下拉列表中的选定值)? 调用doGet()
时是否存在差异?
(我之前在两种环境中使用过的划线笔。)