Java “最好的”;地点;在Tapestry页面中调用业务逻辑?

Java “最好的”;地点;在Tapestry页面中调用业务逻辑?,java,validation,web-applications,tapestry,business-logic,Java,Validation,Web Applications,Tapestry,Business Logic,[Tapestry版本:5.4-rc-1] 在Tapestry页面中放置/调用业务逻辑的最佳“位置”是什么?我可以看到许多示例使用了onValidate()方法(验证结束时表单触发的验证事件)。 目前,我这样做: 在表单提交事件处理程序内部:我只是将“表单上下文”(类似于:“addThis”、“removeThat”、“partialUpdate”、“save”)存储在一个变量中。这是因为我可以从不同的submit/linksubmit组件触发表单submit—可能执行不同的业务逻辑 内部on

[Tapestry版本:5.4-rc-1]

在Tapestry页面中放置/调用业务逻辑的最佳“位置”是什么?我可以看到许多示例使用了
onValidate()
方法(验证结束时表单触发的验证事件)。 目前,我这样做:

  • 在表单提交事件处理程序内部:我只是将“表单上下文”(类似于:“addThis”、“removeThat”、“partialUpdate”、“save”)存储在一个变量中。这是因为我可以从不同的submit/linksubmit组件触发表单submit—可能执行不同的业务逻辑
  • 内部
    onValidate()
    方法:我验证接收到的数据,并使用“表单上下文”执行/调用不同的业务逻辑
  • onSuccess()
    onFailure()
    内部:我只考虑渲染区域/加载一些javascript函数/准备消息以可视化

我不喜欢太多的“混合”业务逻辑和验证,我想知道是否有人会建议一种不同/更好的方法-我看到的唯一替代方法是将所有内容移动到
onSuccess()
中,并在那里处理最终的异常。

我认为确定什么是“业务逻辑”是有意义的你指的是。如果您使用您的服务来验证某些内容,最明显的地方是
onValidate()
。我们使用的验证业务逻辑的一个示例是通过执行DNS MX记录检查来确保电子邮件的域实际存在。或者检查用户名是否已经存在

我们总是在
onSuccess()
方法中放置任何服务调用,然后准备结果视图并返回它

我们只使用
onFailure()
来准备视图,以防
onValidate()
(在表单级别或单个字段级别)抛出某种类型的错误。在我们的例子中,
onFailure()
从不调用任何业务逻辑

如果您确实有多个提交按钮,那么使用一个局部变量来存储调用了哪个按钮,以便后续的
onValidate()
onSuccess()
onFailure()
知道对它们的请求是什么,这也是我们使用的技巧

在您的问题中,我们经常使用的一种方法是使用传入上下文设置表单处理。非常有助于确保在
HttpSession
和/或在循环中使用表单时不会将变量粘在一起