Tapestry学习十三:关于组件(八)submit组件

 
为了解决上面的问题,我们需要一个 submit 组件:
 
<input type="submit" t:type="submit" t:id="submitButton" value="Submit"/>
 
我们还需要一个对应的提交事件处理方法:
 
@OnEvent(component="submitButton")
void onSubmitButton()
{
System.out.println("Submit button was pressed!");
// TODO: Some code to actually register the user
}
  运行应用,我看到类似这样的输出:
Setting user name: john
Setting password: abc
Setting gender: MALE
Setting subscribe: false
Submit button was pressed!
The form was submitted!
 
现在来完成这个页面的处理逻辑,我们只是模仿用户的注册 --- 新建一个用户的类,并且把页面提交的值传给它,然后把这个用户做为一个 ASO 保存起来,页面转向 showall
@ApplicationState
private User user;
 
事件:
@OnEvent(component="submitButton")
Object onSubmitButton()
{
System.out.println("Submit button was pressed!");
User newUser = new User("John", "Johnson");
this.user = newUser;
return ShowAll.class;
}
 
好了,一切都完成了。但是你觉得这样会不会有问题 ? 如果我们有个规则说不能在这个 submit 时间处理方法中返回任何值,怎么办 ?
 
哈哈,你想到了, submit 的处理方法是在 form 提交事件之前的。因此:我们可以在处理 form 提交事件的方法中处理(但是这个 submit 组件必须在 form 中)。
 
private Class nextPage; 

Object onSubmitFromRegistrationForm() 

{ 

System.out.println("The form was submitted!"); 

if (unsubscribe) subscribe = false; 

return nextPage;

}

@OnEvent(component="submitButton")

void onSubmitButton() 

{ 

System.out.println("Submit button was pressed!"); 

User newUser = new User("John", "Johnson"); 

this.user = newUser; 

nextPage = ShowAll.class;

}
 
这里唯一要说的就是返回 null 的时候是重新刷新本页面。
 
如果有多个 submit 按钮呢?
 
这也很容易 只要在 class 中多定义一个事件处理方法就行了:
 
<input type="submit" t:type="submit" t:id="submitButton" 

value="Submit"/>

<input type="submit" t:type="submit" t:id="resetButton" 

value="Reset"/>

 

@OnEvent(component="resetButton")

void onResetButton() 

{ 

userName = null; 

password = null; 

email = null; 

gender = null; 

subscribe = false;

}

 
注:上面这个例子就算你累死也不能正常使用。原因是这个狗日的 Tapestry 的版本问题,他奶奶的。不知道这个作者用的是 5.0 几,反正最新的版本的 @Event value 默认是 action 。但是 submit 的事件触发的是 selected 。所以要在注释上加 value= selected ”。这是比较令人懊恼的,就这一点小错误可能会浪费半天的时间。关于 form 事件的优先级: prepareForSubmit> prepare> validate> 提交按钮的事件 (select)> success>form 本身处理的事件 (submit)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值