Java 在Tapestry布局中处理事件

Java 在Tapestry布局中处理事件,java,events,layout,tapestry,Java,Events,Layout,Tapestry,我的tapestry项目有问题 每次加载一个页面时,如果在相关页面中定义了activate方法,它就会触发activate方法。但我不知道如何在布局模板中捕捉该事件 如果我在layout.java中定义了一个变量,例如: @Property String a = "foo"; 我在模板(layout.tml)中选择该变量值: 此方法不会在layout.java中触发,仅在定义它时在子页面中触发。 (在子页面中,我包括Nathan Q所说的布局)如何刷新变量值 有什么想法吗?我想在这种情况下,布

我的tapestry项目有问题

每次加载一个页面时,如果在相关页面中定义了activate方法,它就会触发activate方法。但我不知道如何在布局模板中捕捉该事件

如果我在layout.java中定义了一个变量,例如:

@Property
String a = "foo";
我在模板(layout.tml)中选择该变量值:

此方法不会在layout.java中触发,仅在定义它时在子页面中触发。 (在子页面中,我包括Nathan Q所说的布局)如何刷新变量值


有什么想法吗?

我想在这种情况下,布局是一个组成部分。只有页面具有激活上下文,这就是为什么不会触发onActivate()

我不知道您的确切用例,但是:


如果它是一个特定于页面的变量,那么您可以将一个参数传递给布局组件

void setupRender() {
   a = ...;
}
Layout.java

@Parameter
@Property
private String a;
@Property
private String someString;

...

void onActivate() {
   someString = "something specific for this page";
}
SomePage.tml

<html t:a="someString" t:type="Layout" ... />

如果需要在每次渲染时设置此变量,并且它不是特定于页面的值,则可以使用布局组件的SetupRender事件

void setupRender() {
   a = ...;
}

好的,我找到了刷新属性值的方法。 这很简单:

我没有在onActivate方法中声明属性并更新该值,而是在layout.java中声明公共方法以获取该值并在那里进行更新更改

private String a = "foo";

public String getA(){

    a = "bar";
    return a;
}

这样,每次加载页面时,我都可以对a变量进行任何更改。

谢谢您的反回答,是的,我这样做了,我没有在我的问题中指定,但是是的,我在页面中指定使用布局并在字符串a中具有属性,很抱歉,但我不喜欢传递参数,嗯,我不知道这样做是否有效,但是我想刷新使用布局的所有页面中的a值,我必须在页面的所有onActivate方法中具体刷新string参数?在我给您的代码示例中,您需要在页面中设置属性并在onActivate()中设置值。(上面更新的代码)但我不确定您的用例是什么,以及这是否是最好的方法……如果“a”变量不是特定于页面的,您可以使用布局组件的SetupRender事件来设置其值。
private String a = "foo";

public String getA(){

    a = "bar";
    return a;
}