我只是想知道为用户实现一种日志显示,其中应用程序中的所有消息都会一直显示给用户。
由于我使用的是JSF 1.2和RF 3.3.3,因此想知道是否可以保存所有消息,并将其添加到不同的请求中并将其显示给用户,以便用户知道他所执行的操作的历史记录。支持团队分析问题的原因也很有用,如果需要模拟或调试目的,他也可以将消息发送给开发人员。
我也知道,面对的消息会被不同的请求清除,这就是我的问题所在,以便在不同的请求中保存消息:)
可以通过保存它们以不同的方式处理会话变量或者......我会很感激所有可能的答案
答案 0 :(得分:2)
您可以在PhaseListener
中的呈现回复期间收集所有消息。 E.g。
public class MessagesListener implements PhaseListener {
@Override
public PhaseId getPhaseId() {
return PhaseId.RENDER_RESPONSE;
}
@Override
public void beforePhase(PhaseEvent event) {
FacesContext context = event.getFacesContext();
Iterator<String> clientIds = context.getClientIdsWithMessages();
while (clientIds.hasNext()) {
String clientId = clientIds.next();
Iterator<FacesMessage> messages = context.getMessages(clientId);
while (messages.hasNext()) {
FacesMessage message = messages.next();
save(clientId, message); // Do your job here.
}
}
}
@Override
public void afterPhase(PhaseEvent event) {
// NOOP.
}
}
要使其运行,请在faces-config.xml
:
<lifecycle>
<phase-listener>com.example.MessagesListener</phase-listener>
</lifecycle>