java - Apache Tapestry @CommitAfter 在重定向到另一个页面后不起作用
问题描述
我有以下场景MyPage.java
:
import org.apache.tapestry5.Link;
import org.apache.tapestry5.annotations.OnEvent;
import org.apache.tapestry5.hibernate.annotations.CommitAfter;
public MyPage {
@Property
@Persist
private SubmitAction submitAction; // an enumeration
@OnEvent(value = EventConstants.SUCCESS, component = "mainForm")
Object onSuccessFromMainForm() {
Link link = null;
commitSomething();
if (submitAction != null && this.submitAction.equals(SubmitAction.APPROVE)) {
link = linkService.getLink(AnotherPage.class, true, "anotherPage");
} else {
link = linkService.getLink(MyPage.class, actionId, documentId);
}
return link;
}
@CommitAfter
private void commitSomething() {
// here are some interaction with Dao and Service layers.
}
Object onActivate(Long actionId, Long documentId) {
// url handler
// do something
return null;
}
}
这个想法是如果满足某些条件来链接到AnotherPage
:
http://localhost:7001/myproject/anotherpage
否则要与 url 参数保持在同一页面上:
http://localhost:7001/myproject/mypage/678123/567234
预期的行为是@CommitAfter
应该在这两种情况下都有效,但仅当链接指向同一页面时才有效。
你知道为什么会发生这种情况吗?
编辑:
实际上我找到了一个解决方案——这不仅仅是Apache Tapestry
. 主要问题是我的业务逻辑依赖于onActivate
. 这种方法Apache tapestry
未能设置某些@Persist
字段并打破了我的逻辑。我添加了onPassivate
方法,现在效果很好。
如果我浪费了您的时间,我深表歉意,并感谢所有答案!
解决方案
您只能将 @CommitAfter 放在挂毯调用的方法上。Tapestry 不知道您commitSomething()
的私有方法。无法拦截此方法调用
推荐阅读
- architecture - 为什么符号位为零时浮点数为正?
- powershell - 如何使用 itextsharp 在 Powershell 中重命名多个 pdf
- python - 在熊猫上使用过滤器时如何排除一些字符串模式?
- flutter - Flutter Web 条子:customscrollview
- javascript - 如何使用 Expo AV 重放音轨
- java - 无法初始化类 com.android.sdklib.repositoryv2.AndroidSdkHandler
- firebase - 有没有办法在没有云功能的情况下触发 Firestore?
- python - 对于 Matplotlib 图表,Tkinter 滚动条不滚动
- python - 迭代不同值的函数
- javascript - Eslint 对齐所有对象值