Fork me on GitHub

Upgrade guide

有时(希望不是太频繁),我们不得不在忍者的行为中引入重大变化. 本文档介绍了将应用程序升级到最新的Ninja版本所需的步骤. 只需从当前版本开始,然后逐步进行操作即可到达文档顶部.

to 6.6.0

  • 使用?no_enc代替noescape. 由于html模板引擎的变化,我们更改了呈现未转义内容的方式. 确保使用类似$ {yourVariableThatShouldNotBeEscaped?no_esc}之类的东西来代替<#noescape> $ {yourVariableThatShouldNotBeEscaped} </#noescape>.

to 6.3.X

Ninja基类的某些内部方法具有新的签名,具有更精确的异常类型. 如果您覆盖了其中的一些,或者实现了自己的Ninja类而不扩展了NinjaDefault类,则应该能够轻松修复它们.

to 6.3.0

邮局现在是一个单独的依赖项. 确保将依赖项添加到pom.xml文件,并将模块添加到Modules.java. 详情请参阅http://www.ninjaframework.org/documentation/sending_mail.html

to 6.0.1

FluentLenium update causes backward incompatibility

请参阅FluentLenium迁移指南http://fluentlenium.org/migration/from-0.13.2-to-1.0-or-3.0/或在项目依赖项中强制使用fluentlenium-core 0.10.3.

to 6.0.0

  • 需要Java 8.
  • 需要Maven 3.3.9.
  • 将Guava的Optional的所有用法替换为Java8 Optional. 您的编译器将指导您.

to 5.4.0

像Freemarker这样的模板引擎的Guice绑定已修改为与以前的版本绑定方式不同. 如果您通过第三方模块使用自定义模板引擎,则可能需要将它绑定到Guice中,但略有不同. 模板引擎通常是这样绑定的:

public class CustomTemplateEngineModule extends AbstractModule {
    @Override
    protected void configure() {
        bind(TemplateEngine.class).to(CustomTemplateEngine.class);
    }
}

从v5.4.0开始,这是需要绑定模板引擎的方式:

public class CustomTemplateEngineModule extends AbstractModule {
    @Override
    protected void configure() {
        bind(CustomTemplateEngine.class);
    }
}

to 3.3.0

Vastly improved conf.Ninja

您现在生成的结果可以自定义,并且正在使用内容协商. json请求将收到json错误消息. HTML请求将获得html错误消息. 请查看界面ninja.Ninja和ninja.NinjaDefault. 他们展示了改进方法的工作原理.

to 3.2.0

i18n handling in templates has changed.

假设您使用$ i18n {" my.message.key"},而messages.properties缺少键" my.message.key"的值. 在该版本之前,模板不会呈现,但会引发异常. 从现在开始,此行为被放松,并且密钥本身将被呈现(+已记录的错误消息). 在上述情况下,您将在渲染的模板中找到" my.message.key".

to 3.0.0

Session and Flash scopes

SessionCookieFlashCookie更改了名称. SessionCookie现在称为SessionFlashCookie称为FlashScope .

上下文对象通过提供getSession()getFlashScope()方法来反映这一点.

Changes in serving of static assets

完全不推荐使用AssetsController的serve方法. 替换为AssetsController的serveStatic和serveWebJars方法.

OLD:

router.GET().route("/assets/.*").with(AssetsController.class, "serve");

新(直接替换):

router.GET().route("/assets/webjars/{fileName: .*}").with(AssetsController.class, "serveWebJars");
router.GET().route("/assets/{fileName: .*}").with(AssetsController.class, "serveStatic");

这也意味着您现在可以从任意目录提供服务,甚至可以从根提供文件服务,例如:

router.GET().route("/robots.txt").with(AssetsController.class, "serveStatic");

to 2.4.0

  • Ninja现在默认使用" ninja.mode = prod"(并且不再使用dev). 许多用户抱怨说,在servlet容器中将Ninja作为war运行时配置prod模式是很奇怪的. 因此,Ninja默认情况下现在假定为prod模式.

这样做的缺点是,如果需要,您现在必须手动为开发人员设置模式. Ninja的SuperDevMode会为您处理此问题,您只需使用" mvn ninja:run"即可在开发人员模式下启动Ninja.

但是,如果使用的是Jetty的maven插件,则必须这样设置系统属性:

        <plugin>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-maven-plugin</artifactId>
            <configuration>
               ....
                <systemProperties>
                    <systemProperty>
                        <name>ninja.mode</name>
                        <value>dev</value>
                    </systemProperty>
                </systemProperties>
            </configuration>
        </plugin>

原型已经配备了新版本.

to 2.3.0

  • 消息文件的文件命名约定已更改. 以前是messages.en.properties或messages.en-US.properties. 现在是messages_en.properties或messages_en-US.properties. 请在您的应用程序中重命名它们,然后就可以开始使用了.

此更改使您可以使用比以前更多的i18n翻译工具. 例如,IntelliJ和Netbeans现在自动将文件检测为i18n文件,并帮助您有效地翻译它们.

From 1.6 to 2.0.0

1) Ninja’s testing artifacts have changed. Please rename the original ninja-core-test to ninja-test-utilities in your pom.xml. You end up with the following artifact:

<dependency>
    <groupId>org.ninjaframework</groupId>
    <artifactId>ninja-test-utilities</artifactId>
    <version>X.X.X</version>
    <scope>test</scope>
</dependency>

2)我们改进了渲染和解析xml的默认方式,现在使用的是Jackson的" module.setDefaultUseWrapper(false)",其生成的输出与Json渲染器更相似. 这样可以更好地处理渲染列表和集合. 您可以通过模型中的注解@ JacksonXmlElementWrapper.useWrapping进行更改,另请参见: https : //github.com/FasterXML/jackson-dataformat-xml

From 1.5.1 to 1.6

请将对Flash Cookie的所有ftl.html访问从下划线语法更改为"."语法. $ {flash_error}变为$ {flash.error}. $ {flash_success}变为$ {flash.success}. $ {flash_anyMessage}变为$ {flash.anyMessage}. 现在,这与我们访问任何ftl.html文件中内容的一般方式更加一致.

From 1.4 to 1.5.1

如果您使用的是Results.redirectTemporary(…)/ Results.redirect(…)或Results.noContent(),并且如果您使用的是http正文来表示某些内容(例如超链接文本),则必须设置result.render(null)删除NoHttpResult. 否则,什么都不会改变. 默认情况下,您根本不需要HTML模板.

From 1.3 to 1.4

i18n的改进. 现在,您可以使用以下代码片段将i18n包括到模板中:$ {i18n(" myMessageKey")}. 很快将不建议使用$ {i18nMyMessageKey}. 不要使用它.

使用新的i18n工具,您现在还可以使用模板变量来格式化消息:

$ {i18n(" myMessageKey",myVariable)}.

From 1.2 to 1.3

在您项目的pom.xml中,请使用ninja-servlet替换artifactId ninja-core. 您最终遇到以下依赖关系:

    <dependency>
        <groupId>org.ninjaframework</groupId>
        <artifactId>ninja-servlet</artifactId>
        <version>1.3</version>
    </dependency>

From 1.1 to 1.2

  • 请使用" ninja.Messages"代替" ninja.Lang"来获取消息.
  • 您的web.xml必须进行改编,并且应类似于:
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
        version="3.0">

    <display-name>ninja</display-name>

    <listener>
        <listener-class>ninja.servlet.NinjaServletListener</listener-class>
    </listener>

    <filter>
        <filter-name>guiceFilter</filter-name>
        <filter-class>com.google.inject.servlet.GuiceFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>guiceFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

</web-app>

From 1.0 to 1.1

无需更改.


by  ICOPY.SITE