我的.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);
}
答案 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) {
希望这有助于我认为穆罕默德的答案同样正确(并且不需要使用额外的框架)。