如何在Java中引用BeanEditForm(tapestry5)中使用的bean的属性?

时间:2013-02-07 16:04:37

标签: java selection tapestry

我的.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);
    }

2 个答案:

答案 0 :(得分:1)

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

还在页面\ component java文件中将t:value属性设置为enum变量,通常此变量将使用tapestry的@Property进行注释。

示例:

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

myEnumVariable用于引用您的类的变量AND作为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 );
    }
}

答案 1 :(得分:0)

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

您将在我分享的链接上找到示例,但基本上您会在select标记中添加两个属性:

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

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

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

希望这有助于我认为穆罕默德的答案同样正确(并且不需要使用额外的框架)。