显示给用户后更新数据库记录

时间:2012-01-06 18:00:31

标签: java servlets jstl

我有一个关于如何使用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或其他什么,我也愿意尝试,如果它是一个可能的解决方案。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我认为你需要做这样的事情:

<c:forEach var="row" items="${result.rowsByIndex}"> 
    <form action="/runthis/servlet" method="post">
        <input type="hidden" name="id" value="<c:out value="${row[1]}"/>" />
        <input type="hidden" name="EmployeeName_orig" value="<c:out value="${row[2]}"/>" />
        Employee Name<input type="text" name="EmployeeName" value="<c:out value="${row[2]}"/>" />
        <input type="hidden" name="Department_orig" value="<c:out value="${row[4]}"/>" />
        Department
        <select id="Department" name="Department">
            <option value="<c:out value="${row[4]}"/>"><c:out value="${row[4]}"/></option>
        </select>
        <input type="submit" value="Save" />
    </form>
</c:forEach>

然后,在您的更新servlet(此处称为/ runthis / servlet)中,您执行某种形式的更新员工,并设置行为id的名称和部门。请注意,我在隐藏字段中发送了ID,但也可以像我们在上面的讨论中提到的那样在网址中发送!

关于更新记录中每个元素的评论:

这可以通过不同方式完成。一种方法是首先从数据库加载记录,并比较字段以了解要更新的字段。但这需要在更新之前从数据库中额外读取。

另一种方式(我在我提出的解决方案中准备的那种方法)是隐藏字段,表单中的每个输入都有一个字段。此隐藏字段保存其输入对应项的原始值。这样,您可以将原始值与新值进行比较,而无需从数据库中读取数据。另一方面,您现在正在为每个帖子请求传输双倍数据。