2009-08-05 7 views
1

제가 진행중인 프로젝트의 일부로 Velocity에서 JSP로 마이그레이션 중입니다. 기존 Velocity 템플릿 집합을 JSP로 변환해야합니다. 우리는 왜 이것이 결정되었는지 (부분적으로는 내 잘못),이 방법으로 경영을 단념시키는 가장 좋은 방법을 논의하는 데 시간을 할애 할 수 있습니다.하지만 시간이 너무 오래 걸릴 수 있습니다.Velocity에서 JSP로 마이그레이션

그래서 내가 찾고있는 것은 일련의 패턴, 모범 사례입니다. 무엇을 도와 드릴까요? 다양한 템플릿에 걸쳐 사용되는 Velocity 매크로가 글로벌 라이브러리 파일에 있습니다. 각 매크로를 JSP 스크립틀릿으로 변환하고 매크로를 Java로 변환 할 생각입니다. 그런 다음 include 지시어 또는 jsp : include를 통해 각 스크립렛 릿에 해당 파일을 각 JSP에 포함합니다. 또한 각 호출을 매크로로 변환하여 스크립틀릿으로 만들려고합니다. 이 매크로는 Spring ModelAndView 클래스에 정의 된 bean 인 매개 변수를 가지고 있습니다.

예비 테스트는이 접근법이 작동하지 않는다는 것을 나타냅니다. JSP 컴파일 오류가 발생하는 것 같습니다. 그러나 나는 내 부분에 오류가 누락되었을 수 있습니다.

OC4J 버전 10.1.3.4.0에서이 웹 응용 프로그램을 실행하고 있습니다.

다음은 간단한 처리 예입니다. 이것은 VM_global_library.vm 파일에 있습니다 :

#macro(showObjectErrors $objectName) 
    #if ($request.errorSystem.hasErrors($objectName)) 
    <table> 
     #foreach ($error in $request.errorSystem.getErrors($objectName)) 
     <tr> 
      <td class="acError">$error</td> 
     </tr> 
     #end 
    </table> 
    #end 
#end 

을 그리고 그것은과 같이 다른 파일에서라고 :

#showObjectErrors("logonForm") 

은 "요청"객체가 HttpServletRequest의 아니라는 것을 참고하지만, 응용 프로그램 클래스입니다. 보기에 너무 많은 복잡한 예제가 있습니다.

+0

"이동 중"이라고 말하면 "마이그레이션 중"이라는 의미이며 가장 쉬운 (가장 쉬운) 마이그레이션 방법을 찾고있는 것으로 보입니다. 그건 사실이 아니야. Velocity에서 JSP로 이동하는 것을 "재 작성"이라고합니다. 결론적으로 최선의 방법은 새 JSP 코드를 스크립 트가 없어도되도록 작성하는 것입니다. – ChssPly76

+0

Velocity 템플릿 파일 세트가 있습니다. JSP로 변환해야합니다. –

+0

그 점을 이해합니다. 어쨌든 당신이 결국 바닥에서 다시 작성하게 될 것이라고 말하고 있습니다. Velocity 매크로는 JSP 세계에서 직접적인 대응이 없다. jsp-include는 다소 빈약 한 대체 코드입니다. Apache Tiles (http : //tiles.apache.org)는 includes를 통해 페이지 구성에 다소 나은 접근법을 제공합니다. Velocity 매크로를 일대일로 번역 할 수는 없습니다. – ChssPly76

답변

2

매크로를 JSP 태그에 포함시킵니다.

<%@ attribute name="shipping" required="true" %> 

<jsp:useBean id="now" class="java.util.Date" /> 
<jsp:useBean id="shipDate" class="java.util.Date" /> 
<c:choose> 
    <c:when test="${shipping == 'QuickShip'}"> 
    <c:set var="days" value="2" /> 
    </c:when> 
    <c:when test="${shipping == 'NormalShip'}"> 
    <c:set var="days" value="5" /> 
    </c:when> 
    <c:when test="${shipping == 'SaverShip'}"> 
    <c:set var="days" value="7" /> 
    </c:when> 
</c:choose> 
<jsp:setProperty name="shipDate" property="time" 
    value="${now.time + 86400000 * days}" /> 
<fmt:formatDate value="${shipDate}" type="date" 
    dateStyle="full"/>.<br><br> 

는 JSP : 여기 WEB-INF/태그에서 sun

shipDate.tag에서 태그 파일의 예입니다

<%@ taglib prefix="sc" tagdir="/WEB-INF/tags" %> 
<h3><fmt:message key="ThankYou"/> ${param.cardname}.</h3><br> 
<fmt:message key="With"/> 
<em><fmt:message key="${param.shipping}"/></em>, 
<fmt:message key="ShipDateLC"/> 
<sc:shipDate shipping="${param.shipping}" /> 

는 JSP에 다음과 같이 작동합니다 귀하의 코드 :

#showObjectErrors("logonForm") 
===> 
<%@ taglib prefix="errorLib" tagdir="/WEB-INF/errorLib" %> 
... 
<errorLib:showObjectErrors objectName="logonForm" /> 

$ request.errorSystem.hasErrors가 요청의 개체라고 가정합니다. 당신이 그것을 검색 할 수 있도록 상황은 : 당신은 단편적인 방식으로 일을하려면

${errorSystem.hasErrors} 
+0

이것은 가장 적합한 것 같습니다. 나는 JSP 2.0을 사용하지 않았기 때문에 그 태그 파일들은 나에게 새롭다. 그들을 밖으로 시도하는 재미있을거야. 지금까지 "hasErrors"는 실제로는 객체가 아니라 메서드이며 param이 필요하므로이를 위해 일반 사용자 정의 태그를 만들어야합니다. –

+0

아마도 JSTL 함수를 만들어야합니다. 그러면 $ {fn : hasErrors (objectName)}과 비슷합니다. 그들은 꽤 멋지다. 이 글을 읽는 가장 좋은 장소는 oreily book입니다. safari.oreilly.com은 무료로 시범 서비스를 제공합니다. – stevedbrown

0

, 당신은 VelocityTools 2.0의 VelocityViewTag의 사용을 할 수 있습니다. Velocity 코드를 JSP 파일에 넣을 수 있습니다.