java - JSP 中的隐藏输入在 Java Servlet 中返回为 null - 为什么?
问题描述
我正在尝试使用 post 方法将变量从我的 JSP 发送到我的 Servlet。但是,该值不断返回 null。我已经放入打印和另一种类型的隐藏输入来检查其他错误,但只是输入在 servlet 中为空。为什么是这样?
JSP:(此代码在表格内)
<c:set var="counter" value="0"/>
<tbody>
<form id="myForm" action="feedingSchedules" method="post">
<c:forEach var="schedule" items="${feeding_schedules}">
<tr>
<td><c:out value="${schedule.schedule_ID}" /></td>
<td><c:out value="${schedule.feeding_time}" /></td>
<td><c:out value="${schedule.recurrence}" /></td>
<td><c:out value="${schedule.notes}" /></td>
<td><c:out value="${schedule.food}" /></td>
<td><c:out value="${schedule.animalID}" /></td>
<td><button id="myButton" class="btn-danger-stale" name="btn${counter}" value="val${counter}">Delete Schedule</button></td>
<c:set var="counter" value="${counter + 1}"/>
<c:out value="${counter }"/>
</tr>
</c:forEach>
<c:out value="${counter }"/>
<input type="hidden" name="hi" id="hi" value="hi"/>
<input type="hidden" name="numSchedules" id="numSchedules" value="${counter}"/>
</form>
</tbody>
</table>
<script type="text/javascript">
var form = document.getElementById("myForm");
document.getElementById("myButton").addEventListener("click", function () {
form.submit();
});
</script>
Servlet:(“test”变量为空;代码在“count”声明处崩溃,因为 parseInt 无法解析空值)
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
FeedingScheduleDAO dao = DAOUtilities.getFeedingScheduleDao();
List<FeedingSchedule> schedules = dao.getAllSchedules();
//Get Parameters
System.out.println("got here");
String test = request.getParameter("hi");
System.out.println(test);
int count = Integer.parseInt(request.getParameter("numSchedules"));
for(int i = 0; i < count; i++) {
String btn = null;
btn = request.getParameter("btn" + i);
if(btn == ("val" + i)) {
System.out.println("got here");
// call delete method from DAO
try {
dao.deleteSchedule(schedules.get(i));
request.getSession().setAttribute("message", "Schedule successfully deleted");
request.getSession().setAttribute("messageClass", "alert-success");
response.sendRedirect("feedingSchedules");
} catch (Exception e) {
e.printStackTrace();
request.getSession().setAttribute("message", "There was a problem deleting the schedule at this time");
request.getSession().setAttribute("messageClass", "alert-danger");
request.getRequestDispatcher("feedingScheduleHome.jsp").forward(request, response);
}
}
}
}
解决方案
您可以尝试通过设置表单方法 = GET 来调试代码。这将帮助您了解将要发送给 Servlet 的值。然后您可以检查 URL 以查看数据是否存在。如果您在 url 中看不到数据,这意味着表单提交无法正常工作,请尝试此操作。
推荐阅读
- ruby-on-rails - 类加载后的Ruby包含链模块
- groovy - 如何用微秒解析时间戳?
- python - Scrapy with Splash 仍然给 DEBUG: Crawled (200)
- db2 - 如何在不等待的情况下锁定 DB2 中的表
- c# - 将视图模型集合绑定到 WPF MVVM TabControl
- neo4j - 在 NEO4J 中导入 csv 时出错
- mapbox-gl-js - 在“填充”类型的 mapbox gl js 层中:我们可以控制笔画粗细吗?
- java - Eclipse 对可访问代码给出死代码警告
- python - 将多个 csv 文件读入 Pandas 数据框
- python - 从 mongo db 游标的嵌套数据中构建 pandas 数据框