Java - WAR存档

时间:2018-03-14 14:23:13

标签: java servlets enums nullpointerexception

我有一个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()时是否存在差异?

(我之前在两种环境中使用过的划线笔。)

0 个答案:

没有答案