1

私が取り組んでいるプロジェクトの一環として、Velocity から JSP に移行しています。既存の Velocity テンプレートのセットを JSP に変換する必要があります。なぜこれが決定されたのか(部分的には私のせいです)、どちらがより良く、この道から経営陣を思いとどまらせる最良の方法かを議論するのに何時間も費やすことができますが、彼らはこれを行うことに専念しているので、それは時間の無駄です.

だから、私が探しているのは、私を助けるためのパターン、ベストプラクティス、あなたが持っているものです。グローバル ライブラリ ファイルには、さまざまなテンプレートで使用される多数の Velocity マクロがあります。各マクロを JSP スクリプトレットに変換し、マクロを Java に変換することを考えています。次に、include ディレクティブまたは jsp:include を使用して、すべてのスクリプトレットを含むそのファイルを各 JSP に含めます。また、マクロへの各呼び出しをスクリプトレットに変換することも考えていました。これらのマクロには、Spring ModelAndView クラスで定義された Bean であるパラメーターがあります。

予備テストでは、このアプローチは機能しないことが示されているようです。JSP コンパイル エラーが発生しているようです。しかし、私は自分の側でエラーを見逃す可能性があります。

OC4J バージョン 10.1.3.4.0 でこの Web アプリケーションを実行しています。

これは、私が対処しなければならないことの簡単な例です。これは 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 ではなく、アプリケーション クラスであることに注意してください。表示するには多すぎる、はるかに複雑な例があります。

4

2 に答える 2

2

マクロを JSP タグ インクルードに変換します。これは、 sunのタグ ファイルの例です。

WEB-INF/tags の下の shipDate.tag:

<%@ 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:

<%@ 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}
于 2009-08-05T17:34:17.783 に答える
0

少しずつ処理を進めたい場合は、VelocityTools 2.0 の VelocityViewTag を利用できる場合があります。これにより、Velocity コードを jsp ファイルに直接配置できます。

<velocity:view>
#if( $foo ) this is #trickyMacroStuff() for some reason #end

#parse('whatever.vm')
</velocity:view>

Put some ${jstl} here: <fmt:message key="bar"/>

<velocity:view template="sometemplate.vm"/>
于 2009-08-11T21:10:39.633 に答える