java - 如何在没有 Seam 的情况下访问 Hibernate Envers 中的 FacesContext?

标签 java hibernate jsf jsf-2 hibernate-envers

我们正在我们的数据库审计项目中实现 Envers,但遇到了障碍。我们不知道如何确定是哪个用户在进行更改。我能找到的所有示例都使用了 Seam 及其 Component.getInstance 技术。

  • 玻璃鱼 3.1.2.2
  • Mojarra 2.1.13
  • hibernate 4.1.6.Final

这是我们的自定义修订实体

@Entity
@RevisionEntity(CustomRevisionListener.class)
public class CustomRevisionEntity {
    @Id
    @GeneratedValue
    @RevisionNumber
    private int id;

    private String login;

    getters/setters...
}

自定义修订监听器

public class CustomRevisionListener implements RevisionListener {
    @Override
    public void newRevision(Object revisionEntity) {
        CustomRevisionEntity rev = (CustomRevisionEntity) revisionEntity;

        //how do we get the FacesContext/remote user?

        rev.setLogin("unknown");
    }
}

我们尝试了注入(inject)和范围界定无济于事,我们也尝试了这个 ClassLoader solution我找到了一些似乎是类似情况的东西,但是 getCurrentInstance() 仍然是 null;

感谢您的帮助!

最佳答案

adamw 是正确的,FacesContext.getCurrentInstance() 在自定义 RevisionListener 中确实有效。

我们有一个 javax.servlet.Filter 实现试图处理 doFilter() 方法中的事务,无论出于何种原因导致 FacesContext.getCurrentInstance() 在 RevisionListener 中返回 null。出于不同的原因,我们昨天从 web.xml 中删除了它,今天早上我在没有它的情况下尝试 getCurrentInstance() 时,一切正常。

感谢大家的回复,也许有一天这会对其他人有所帮助。

关于java - 如何在没有 Seam 的情况下访问 Hibernate Envers 中的 FacesContext?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14609394/

相关文章:

Blackberry JDE v5.0 开发中的 java.util.Arrays

java - XStream 如何选择其转换器?

JavaFX 按钮对第二次单击而不是第一次单击使用react

mysql - org.springframework.web.multipart.MultipartException : Current request is not a multipart request

spring - java.lang.IllegalArgumentException : Unknown entity 异常

javascript - 如何提交并转发到新链接

javascript - 在 jQuery 中使用参数调用 JSF 托管 bean 方法

JSF 2.0 : Validate equality of 2 InputSecret Fields (confirm password) without writing Code?

java - 在 JFrame 中绘制多条线(最小 9x9)

java - 使用连接表的 Hibernate 一对一单向映射