web-dev-qa-db-ja.com

VelocityEngineUtilsはSpring3.2で削除されたので、他に何を使用しますか?

今日、SpringWebアプリケーション全体をSpring3.1.1からSpring3.2にアップグレードしました。

Spring 3.2を除いて、既存のアプリのほとんどの部分は壊れません。

org.springframework.ui.velocity.VelocityEngineUtils

クラスはspring-context-3.2.0.RELEASE.jarから完全に削除されているようです。

this urlのように移行ガイドを見つけました。

org.springframework.ui.velocity.VelocityEngineUtilsクラスは非推奨になったばかりですが、実際には完全に削除されています。

たぶん私は間違っているのかもしれませんが、VelocityEngineUtilsクラスがまだどこかに存在するかどうか、そうでない場合は、使用できる代替クラスは何ですか。

EDIT:速度パッケージ全体がSpring 3.2から削除されたようですので、org.springframework.ui.velocity.VelocityEngineFactoryBeanも存在しません。春はVelocityから離れて歩いていますか?

15
woraphol.j

VelocityEngineUtilsspring-context jarに入っていたとは思いません(GitHubによると、少なくともSpringの最後の3.1.xリリース以降はそうではありません)。

とにかく、あなたはそれをspring-context-support-3.2.0.RELEASE.jarで見つけることができます

9
madth3

完全な答えを追加したかった。

まず、依存関係を追加します。

    <dependency>
        <groupId>org.Apache.velocity</groupId>
        <artifactId>velocity</artifactId>
        <version>1.6.4</version>
    </dependency>

次に、このようなカスタムVelocityEngineFactoryがある場合。

@Bean
public VelocityEngineFactory velocityEngine(){
    VelocityEngineFactoryBean bean = new VelocityEngineFactoryBean();
    Properties properties = new Properties();
    properties.setProperty("input.encoding", "UTF-8");
    properties.setProperty("output.encoding", "UTF-8");
    properties.setProperty("resource.loader", "class");
    properties.setProperty("class.resource.loader.class", "org.Apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
    bean.setVelocityProperties(properties);
    return bean;
}

以下のようなBean定義に置き換える必要があります(あなたの@Configurationクラス);

@Bean
public VelocityEngine velocityEngine() throws Exception {
    Properties properties = new Properties();
    properties.setProperty("input.encoding", "UTF-8");
    properties.setProperty("output.encoding", "UTF-8");
    properties.setProperty("resource.loader", "class");
    properties.setProperty("class.resource.loader.class", "org.Apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
    VelocityEngine velocityEngine = new VelocityEngine(properties);
    return velocityEngine;
}

最後に、次のように使用します。

@Autowired
private VelocityEngine velocityEngine;

public String prepareRegistrationEmailText(User user) {
    VelocityContext context = new VelocityContext();
    context.put("username", user.getUsername());
    context.put("email", user.getEmail());
    StringWriter stringWriter = new StringWriter();
    velocityEngine.mergeTemplate("registration.vm", "UTF-8", context, stringWriter);
    String text = stringWriter.toString();
    return text;
}

幸運を。

21
bekce

SpringでのVelocityEngineUtilsの非推奨に関して、Springのドキュメントでは、代わりに何を使用するかについてあまり明確ではありません。

それはただ言う:

非推奨。代わりに、mergeTemplateIntoString(VelocityEngine、String、String、Map)を使用して、独自のAPIでのVelocity1.6の対応する非推奨に従います。

さらに混乱させるために、リンクはそれ自体を参照しています。

基本的には、Velocity自体を使用すると言っているだけです。

これがあなたがそれをする方法の説明です。

 // instead of a model map, you use a VelocityContext

 VelocityContext velocityContext = new VelocityContext();
 velocityContext.put("key1", value1);
 velocityContext.put("key2", value2);

 // the velocityEngine you wired into Spring has a mergeTemplate function
 // you can use to do the same thing as VelocityEngineUtils.mergeTemplate
 // with the exception that it uses a writer instead of returning a String      

 StringWriter stringWriter = new StringWriter();
 velocityEngine.mergeTemplate("templateName.vm", "UTF-8", velocityContext, stringWriter);

 // this is assuming you're sending HTML email using MimeMessageHelper

 message.setText(stringWriter.toString(), true);
14
Chris Jensen

VelocityEngineUtilsはSpring> 3.2で非推奨になりました

以下の依存関係は完全に機能します

<dependency>
            <groupId>com.alibaba.spring</groupId>
            <artifactId>spring-webmvc-velocity</artifactId>
            <version>1.4.3.18.RELEASE</version>
 </dependency>

Velocityを完全に廃止し、thymeleafに置き換えることをお勧めします

0
hitesh bedre