2010-04-20 5 views
0

예제를 가정 해 보겠습니다. 다음과 같은 인터페이스가 있습니다 :2 단계 JSP 페이지 렌더링

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() 호출을 수행하면 데이터를 사용할 수있을 때까지 차단됩니다.

그런 일을 할 수있는 방법이 있습니까?

답변

3

더 나은 디자인은 JSP 렌더링을 변경하려고하지 않을 것이라고 생각합니다. 모든 데이터베이스 코드를 서버 측에 저장하고 AJAX 호출을 사용하여 서버 측 구성 요소에서 해당 데이터를 가져옵니다.

일반적으로 커스텀 태그 라이브러리에 물건을 퍼트리는 것은 나쁜 생각입니다. JSTL 및/또는 Spring 태그 라이브러리 만 있으면됩니다. 내 UI가 더 많은 일을해야한다고 생각하면 잘못 생각하고 있습니다.

JS 장애인 고객의 경우 데이터 왕복 여행을하고 백그라운드에서 시도하지 않도록합니다. 그들에게 선택권을주십시오 : 기다리거나 JS를 켜십시오.

+0

예, 우리는 그것에 대해 생각했습니다. 하지만 js 장애가있는 클라이언트와의 호환성을 저장하려고합니다. 어쩌면이 작업에 더 적합한 다른 템플릿 엔진이있을 수 있습니까? –