java - 有什么方法可以根据某些条件递归调用 Rythm 模板吗?

标签 java rythm

我目前正在使用 Rythm创建一些片段 - 结合 AST ,因为模板依赖于 Java 文件。

Invoking templates按预期工作。有一个意想不到的行为。我想递归调用模板,但似乎这是不可能的。

Foo.html 模板

@args String someString, boolean recursion

Calling foo template with recursion: @recursion
@if(recursion) {
    A recursion was requested: @recursion
    @foo(someString, false)
}

请注意,根据本示例的意图,这仅提供了 1 级递归。但是,稍后我想在 @foo(someString, false) 行中使用条件而不是 false

您可以尝试代码片段 here只需将提供的示例复制并粘贴到 foo.html 即可。

错误信息

The method foo(String, boolean) is undefined for the type Cfoo_html__R_T_C__

Template: /foo.html

Relevant template source lines:
-------------------------------------------------
   1: @args String someString, boolean recursion
   2:     
   3:     Calling foo template with recursion: @recursion
   4:     @if(recursion) {
   5:       A recursion was requested: @recursion
>> 6:         @foo(someString, false)
   7:     }

/*
 * Omitted for the sake of readability.
 */

现在,错误似乎与递归无关。不过,这是我在 Eclipse 中看到的错误消息。

我想,当调用一个模板时,不可能在它自身内部调用它,因为 Rythm 只寻找其他模板 - 至少看起来是这样。

使用上面的链接访问 Rythm Fiddle , 将代码放在 bar.html 而不是 foo.html - 从 @foo(someString, false) 更改行 #6 @bar(someString, false)

现在,将以下行放入 foo.html 中:

@bar("foo", true)

这样做时,错误变为:

java.lang.SecurityException: java.util.concurrent.TimeoutException

我认为这证明了我上面的假设,因为 Rythm 现在似乎找到了模板(或方法)。这基本上就是我被困的地方。

因此,问题是:有什么方法可以根据某些条件递归调用 Rythm 模板吗?

我也乐于接受其他建议,因为递归通常可以以非递归方式处理。我只是想避免重复代码。

最佳答案

Rythm 支持@this() 指令以递归方式加载模板。参见 http://play-rythm-demo.appspot.com/demo/fibonacci

然而,它看起来像是引入了一个错误,现在即使指定了终止条件,它也会引发 StackOverflowError。请提交错误报告至https://github.com/rythmengine/rythmengine/issues

更新

StackOverflowError 是由boolean 类型引起的。如果使用其他类型的变量来控制递归调用的终止,一切都很好。

@args String foo, int i

<h1>@foo</h1>
Calling foo template with recursion: @i
@if(i > 1) {
A recursion was requested: @i
@this({foo: foo, recursion: false, i: (i - 1)})
}

下面是在 rythm fiddle 上做的测试

enter image description here

关于java - 有什么方法可以根据某些条件递归调用 Rythm 模板吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43001218/

相关文章:

java - 在调用处理程序之前使用 Tomcat 8 和 Spring 4 ClassCastException 的 websockets

java - 无法将 Rythm 模板引擎与 servlet 3.0 一起使用

java - 在 Rythm 中使用另一个变量设置一个变量

java - Xpath 2.0 函数无法在使用 Saxon 的 Java 中工作

java - 我们可以将任何java程序转换成eclipse插件吗?

java - JPA1 - ID 是父类(super class)的一部分,由于 @Entity 注释类中缺少 @Id,导致错误

java - 使用 gwt-log 框架在 GWT 应用程序中的何处指定自定义日志文件名?

java - Rythm模板引擎自定义标签加载

java - Rythm 使用变压器和带有 @i18n 标签的嵌套标签