两次传递JSP页面呈现

时间:2010-04-20 12:00:43

标签: java jsp asynchronous

假设一个例子。我有以下界面:

public interface DataSource<T> {

  Future<T> fetch();
}

此数据源可以执行异步数据提取。我们在JSP中使用数据源有以下标记:

<html>
  <d:fetch from="${orderDS}" var="orders">
    <c:foreach in="${orders}" var="order">
      <div class="order">
        <c:out value="${order.title}" />
      </div>
    </c:foreach>
  </d:fetch>
</html>

那么,我想要什么?我希望JSP渲染引擎两次调用我的自定义标记(在此示例中为FetchTag)。在第一次调用时,FetchTag将执行DataSource.fetch()调用并将Future保存为对象字段。在第二次调用时,FetchTag会执行Future.get()调用,并将被阻止,直到数据可用。

有没有办法做这样的事情?

1 个答案:

答案 0 :(得分:3)

我认为更好的设计不会尝试改变JSP渲染。将所有数据库代码放在它所属的服务器端,并使用AJAX调用从服务器端组件获取该数据。

一般来说,我发现在自定义标记库中嵌入东西是个坏主意。 JSTL和/或Spring标记库就是我所需要的。如果我觉得我的UI需要做更多的事情,我会错误地思考它。

对于JS禁用的客户端,我只是让他们对数据进行往返,而不是尝试在后台进行。给他们一个选择:等待或打开JS。