我目前正在审核一个项目的用户操作,我有以下问题。
有一个名为“审计日志”的功能,它列出了用户在我的系统上执行的一组完整的已审计操作。每当某个用户列出审计日志时,也需要对此操作进行审计。
审计日志的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>目前,我对特定的代码片段进行了审核操作:
<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;
}对后台bean的命名操作执行审核的问题如下:


需要一种注册方式,只需查阅一次审计日志,而不是像在图像上显示的那样。有什么想法吗?是否可以使用JSF或相关标记来保证上面的内容?
TL;DR在JSF页面上只有一个PrimeFaces DataTable,如何审计这种页面的打开,使审计注册在单行上,而不是像在图像中所显示的那样。
Pd:用时间差过滤所有重复的审计条目是不可行的。
发布于 2011-03-04 20:41:26
解决了我的问题。
现在支持bean是ViewScoped,我刚刚创建了一个布尔变量,它确保每个Bean ViewScope循环只进行一次审计。
public List<AuditEntry> getAllAuditEntries()
{
if (!isViewed)
{
isViewed = true;
auditFacade.createAuditEntry(
__creates Audit Entry here__);
}
return allAuditEntries;
}发布于 2011-03-04 19:53:15
如果可以将ManagedBean放入RequestScope中,则可以在bean`s的构造函数中调用createAuditEntry方法。然后,每个请求只调用一次。
致以问候。
https://stackoverflow.com/questions/5198409
复制相似问题