0

我的 .tml 文件中有这样的内容:

<t:beaneditform t:id="adForm" object="editableAd"
                        reorder="actiontype,shops,movies,streams,widgets" ....

我的问题是如何访问(引用)actionType,它是 .java 文件中的 Enum (实际上是 SELECT )?当用户更改此选择(下拉)的值时,我只需要处理事件,显然是在提交表单本身之前。

如果这样的事情对我有用......

@OnEvent(component = "adForm.actionType", value=EventConstants.VALUE_CHANGED)
    public void actionTypeValueChanged(String value) {
      log.info("value is: " + value);
    }
4

2 回答 2

1

要在客户端使用Select html 组件中的更改值进行更新,请在模板文件中使用带有t:zone属性的挂毯选择组件(即,在您的情况下,它可以指向任何虚拟区域,只需要正确设置如果您需要在更改值时更新区域)

还要t:value在 page\component java 文件中将属性设置为 enum 变量,通常这个变量会用 Tapestry 的@Property.

例子:

<t:select t:id="myEnumVariable" t:zone="dummyZone" t:value="myEnumVariable"/>

myEnumVariable用于引用您的类的变量并充当 ID(即,实际字符串myEnumVariable用作 id),这不是必需的,但这样更具可读性和可维护性)

public class MyClass{
    @Property
    private MyEnum myEnumVariable;

    @OnEvent(component = "myEnumVariable", value=EventConstants.VALUE_CHANGED)
    public void actionTypeValueChanged(**MyEnum** newValue) {
        this.myEnumVariable = newValue; // <<<<<<
        log.info("value is: " + myEnumVariable );
    }
}
于 2013-02-07T18:54:01.037 回答
0

如果您不介意将 ChenilleKit 框架用于挂毯,您可以尝试使用该框架的OnEvent mixin

您会在我分享的链接上找到示例,但基本上您在选择标签中添加了两个属性:

<t:select t:id="myselect" ... t:mixins="ck/OnEvent" t:event="change" />

然后在你的 java 类上添加事件处理程序:

@OnEvent(component="myselect", value='change')
public void onChangeDoSomething(String value) {

希望对您有所帮助,顺便说一下,我认为穆罕默德的回答同样正确(并且不需要使用额外的框架)。

于 2013-02-08T13:52:22.530 回答