【问题标题】:Action Audit on a JSF with just a Primefaces DataTable仅使用 Primefaces 数据表对 JSF 进行操作审计
【发布时间】:2011-03-04 19:37:17
【问题描述】:

我目前正在审核项目中的用户操作,并且遇到以下问题。
有一个名为审计日志的功能,它列出了用户在我的系统上执行的完整的审计操作集。每当某个用户列出审核日志时,也需要审核此操作。
生成审计日志的 JSF 页面如下:

<ui:composition ...>
    <ui:define name="content">
        <h:form id="audit_List">
            <h:panelGrid columns="1">
                <p:breadCrumb>
                    <p:menuitem value="#{i18n['xxx']}" url="index.xhtml" />
                    <p:menuitem value="#{i18n['yyy']}"/>
                </p:breadCrumb>
                <p:panel header="#{i18n['zzz']}">
                    <p:dataTable var="auditEntry"
                                 value="#{auditList.allAuditEntries}"
                                 paginator="true"
                                 rows="10"
                                 paginatorPosition="top"
                                 dynamic="false">
                        <p:column sortBy="#{i18n[auditEntry.category]}"
                                  filterBy="#{i18n[auditEntry.category]}">
                            A column here
                        </p:column>
                        <p:column sortBy="#{auditEntryDescriptionI18N[auditEntry]}"
                                  filterBy="#{auditEntryDescriptionI18N[auditEntry]}">
                            A column here
                        </p:column>
                        <p:column sortBy="#{auditEntry.username}"
                                  filterBy="#{auditEntry.username}">
                            A column here
                        </p:column>
                        <p:column id="problematicColumn" 
                              sortBy="#{auditEntry.occurredOn}"
                              filterBy="#{auditEntry.occurredOn}">
                              <f:facet name="header">
                                       <h:outputText value="#{i18n['aaa']}"/>
                              </f:facet>
                              <h:outputText value="#{auditEntry.occurredOn}">
                                            <f:convertDateTime type="date"
                                                   ___I suspect pattern is giving the problem..___
                                                  pattern="{auditList.listDateFormat.stringValue}"
                                                  timeZone="#{sessionBean.serverTimeZone}"/>
                               </h:outputText>
                         </p:column>
                    </p:dataTable>
                </p:panel>
            </h:panelGrid>
        </h:form>
    </ui:define>
</ui:composition>

我目前对特定代码 sn-p 执行审核操作:

<p:dataTable var="auditEntry"
             value="#{auditList.allAuditEntries}"
             paginator="true"
             rows="10"
             paginatorPosition="top"
             dynamic="false">

我的后盾:

public List<AuditEntry> getAllAuditEntries()
    {
        auditFacade.createAuditEntry(function that creates an audit entry);
        return allAuditEntries;
    }

对 backing bean 的命名操作执行审计的问题如下:

需要一种方法来注册一次查询审核日志,而不是像图像上显示的那样。有任何想法吗?使用 JSF 或相关标签的任何方式都可以保证上述内容?

TL;DR 在 JSF 页面上只有一个 PrimeFaces 数据表,如何审核此类页面的打开以使审核注册在单行上,而不是如图所示。
Pd:重新编辑所有按时差过滤的重复审计条目是不可行的

【问题讨论】:

    标签: java jsf datatable primefaces audit


    【解决方案1】:

    如果可以将 ManagedBean 放在 RequestScope 中,则可以在 bean 的构造函数中调用 createAuditEntry 方法。然后每个请求只调用一次。

    问候。

    【讨论】:

    • 嗨,马特。不幸的是,bean 已经 RequestScoped 并且我尝试在 bean 构造函数上进行审计。但是,由于我的帖子中更新了 DataTable 列,导致类实例化异常:(
    • 好吧,我发现了问题.. 由于支持 Bean 是请求范围的,因此每次选择 DataTable 的不同页面时,它将实例化一个新 bean,因此将生成一个新的审计条目...我将不得不让 Backing Bean 在视图范围内工作..
    • 如果您通过更改范围来消除异常会很有趣。
    【解决方案2】:

    解决了我的问题。
    支持 bean 现在是 ViewScoped,我刚刚创建了一个布尔变量,它确保每个 Bean ViewScope 周期只进行一次审计。

    public List<AuditEntry> getAllAuditEntries()
        {
            if (!isViewed)
            {
                isViewed = true;
                auditFacade.createAuditEntry(
                    __creates Audit Entry here__);
            }
    
            return allAuditEntries;
        }
    

    【讨论】:

      猜你喜欢
      • 2013-09-07
      • 2012-05-17
      • 2023-03-06
      • 2015-02-15
      • 2012-11-22
      • 1970-01-01
      • 2018-03-11
      • 2016-11-17
      • 1970-01-01
      相关资源
      最近更新 更多