【发布时间】:2014-03-07 02:44:27
【问题描述】:
我对 JSP、jQuery 和 AJAX 还很陌生。我有一个 JSP,它使用基于会话中 List 变量中的值填充的表。代码在这里:
<table id="someData" class="display" width="95%">
<thead>
<tr>
<th>Column 1</th>
<th>Column 2</th>
<th>Column 3</th>
</tr>
</thead>
<tbody>
<c:forEach var="var" items="${sessionVar}">
<tr>
<td><c:out value="${var.ID}" /></td>
<td><c:out value="${var.name}" /></td>
<td><c:if test="${var.gender=='M'}">
<c:out value="Male" />
</c:if> <c:if test="${var.dispositionCD=='F'}">
<c:out value="Female" />
</c:if>
</td>
</tr>
</c:forEach>
</tbody>
</table>
我使用 .ajax 调用控制器,这可能会导致 sessionVar 变量发生变化。可以添加其他人,可以删除一些人,可以更改一些名称,或者根本没有更改。控制器只会刷新会话中的 List 变量。这是我在用户输入一些数据并按下按钮时运行的 ajax 调用:
$.ajax({
type : "POST",
url : urlText,
data : 'testdata',
dataType : 'json',
success : function(data,textStatus) {
$('#errormessage').text(data);
},
error : function() {
$("#errormessage").text("Error while processing request..Please try again");
}
});
那么一旦session中的List变量更新了,如何更新html表中的数据呢?我已经在 JSP 和 jQuery 上工作了大约一个月,所以如果这似乎是业余时间,请放轻松。 :)
【问题讨论】:
-
我不是 JSP 方面的专家,但我看到的基本问题是您的初始渲染是在服务器端完成的,但您想在客户端更新表,而不需要页面刷新,对吗?如果所有渲染都是任一服务器端或客户端,而不是两者,那会更简单。
-
如果我是正确的并且您想使用 Javascript 更新表格,您可以发布 AJAX 响应的示例吗?
-
对于初始渲染,控制器使用 request.getSession("false").setAttribute("sessionVar", listOfPeopleToShow)。然后,在 JSP 上,我使用 c taglib 来遍历列表并填充表。它实际上是客户端,但使用放置在服务器会话中的列表。现在我要做的是调用控制器,运行一个可能会或可能不会更新数据的函数,并将数据读入新的 ArrayList,将其置于会话中,从 ajax 调用返回,并在“成功”中函数,更新表,因为它的数据可能已经改变了。
-
好吧,我不明白它怎么可能是客户端的。会话变量在客户端不可访问(除非您在运行时使用变通方法将会话变量写入 JS 变量,但这仍然是服务器端操作)。 JSP 标签库是服务器端组件。