【发布时间】:2012-01-06 18:00:31
【问题描述】:
我有一个关于如何使用 JSTL 和 java servlet 更新数据库中的特定记录的问题。
可以调用一条记录,我使用 servlet 运行查询以使用这种格式填充 jsp 页面。
ResultSet results = getRecords.executeQuery(); //run database query
Result result = ResultSupport.toResult(results);
request.setAttribute("result", result);
RequestDispatcher rd = request.getRequestDispatcher("/showReport.jsp"); //redirect to this page with query info
rd.forward(request, response);
在jsp页面中,我使用这种格式来填充页面。
行号对应于查询运行方式的值的索引。
<c:forEach var="row" items="${result.rowsByIndex}">
<form action = "/runthis/servlet?id=${row[0]}" method = "get" >
Employee Name<input type="text" value="<c:out value="${row[2]}"/>" />
Department<select>
<option value="<c:out value="${row[4]}"/>"><c:out value="${row[4]}"/></option></select>
<input type="submit" value="Save">
</form>
</c:forEach>
例如,如果有人更改了员工姓名,但不考虑部门字段,反之亦然,我将如何处理?
我认为我应该能够将此表单操作踢到“更新 servlet”,但如果不需要,我宁愿不“更新”记录中的每个元素。
另外我还在学习网络开发,所以如果你能想到一个更好的方法来预填充东西,通过 javascript 或其他方式,我也愿意尝试,如果它是一个可能的解决方案。
感谢您的帮助!
【问题讨论】:
-
5 件事:1) 干得好!数据库逻辑和前端 jsp 之间的分离 :) 2) 孤独-tag? 3) input-tag 不会自行关闭。 4) 如何提交您将生成的这些表格之一?站在文本字段中按
?因为,你知道,没有提交按钮;) 5)为什么你的表单标签上没有方法属性? -
1) 谢谢,我最初是开始学习这个做脚本的,后来才知道这是过时的错误方法 :D 2) 已修复,谢谢,正在快速复制粘贴,但我没有删除足够的内容3) 已修复 4) 添加了提交按钮,很好的观察 :) 5) 添加了 get 方法(不确定是 get 还是 post)
-
过时与否,有分离。我相信分离!在这种情况下我会使用 post ,因为您要写入数据,而不是读取它:) 新问题!当servlet(/runthis/servlet)获取表单数据时,servlet如何知道数据库中的哪一行要更新?
-
啊,我也应该补充一下。我通常通过向 /runthis/servlet?id=${row[x]} 中调用的 servlet 传递参数来做到这一点,并在该 servlet 中使用 request.getParamater 获取该值(id)以运行和检索适当的行/查询。
-
好计划!最后一个问题(我认为):选择/选项列表是否真的正确填充?现在在我看来,每个员工只能有一个选择,而且他们已经在同一个部门。你试过那个部分了吗?