Pergunta

Como parte de um projeto que estou trabalhando, estamos migrando do Velocity para JSP. Eu preciso para transformar o conjunto de modelos de velocidade existentes em JSPs. Poderíamos passar horas discutindo por que isso foi decidido (em parte culpa minha), qual é o melhor ea melhor maneira para dissuadir a gestão desse caminho, mas isso seria um desperdício de tempo como eles estão empenhados em ter este feito.

Então, o que eu estou procurando é um conjunto de padrões, melhores práticas, o que você tem, para me ajudar. Há um monte de macros velocidade no arquivo de biblioteca global, que são usados ??em uma variedade de modelos. Estou pensando em converter cada macro a um scriptlet JSP e traduzir a macro para Java. Então eu iria incluir esse arquivo com todos os scriptlets em cada JSP, quer através da diretiva de inclusão ou jsp: include. Eu também estava pensando em converter cada chamada para uma macro em um scriptlet. Essas macros têm parâmetros que são feijão definidos na classe Primavera ModelAndView.

Os testes preliminares parecem indicar que esta abordagem não vai funcionar. Parece que estou recebendo erros de compilação JSP. Mas, eu poderia estar faltando um erro da minha parte.

Eu estou correndo esta aplicação Web no OC4J versão 10.1.3.4.0.

Aqui está um exemplo simples do que eu tenho que lidar com eles. Esta é no arquivo 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

E ele é chamado em outros arquivos assim:

#showObjectErrors( "logonForm" )

Note que o objeto "pedido" não é um HttpServletRequest, mas uma classe de aplicação. Há muito mais complexos exemplos que são demais para show.

Foi útil?

Solução

Converter as macros para JSP tag inclui. Aqui está um exemplo de um arquivo de tag de sol

shipDate.tag em WEB-INF / tags:

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

O 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}" />  

O seu código deve funcionar como este no JSP:

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

Eu assumo $ request.errorSystem.hasErrors seria um objeto no contexto de solicitação, assim você iria recuperá-la com:

${errorSystem.hasErrors}

Outras dicas

Se você quiser fazer as coisas de forma fragmentada, você pode ser capaz de fazer uso do VelocityViewTag em VelocityTools 2.0. Ele permitirá que você colocar Velocity certo código em seus arquivos 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"/>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top