首页 > 解决方案 > 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;
    }
}

这个想法是如果满足某些条件来链接到AnotherPagehttp://localhost:7001/myproject/anotherpage

否则要与 url 参数保持在同一页面上: http://localhost:7001/myproject/mypage/678123/567234

预期的行为是@CommitAfter应该在这两种情况下都有效,但仅当链接指向同一页面时才有效。

你知道为什么会发生这种情况吗?


编辑:

实际上我找到了一个解决方案——这不仅仅是Apache Tapestry. 主要问题是我的业务逻辑依赖于onActivate. 这种方法Apache tapestry未能设置某些@Persist字段并打破了我的逻辑。我添加了onPassivate方法,现在效果很好。

如果我浪费了您的时间,我深表歉意,并感谢所有答案!

标签: javatapestry

解决方案


您只能将 @CommitAfter 放在挂毯调用的方法上。Tapestry 不知道您commitSomething()的私有方法。无法拦截此方法调用


推荐阅读