문제

응용 프로그램의 모든 메시지에서 사용자에게 모든 메시지가 사용자에게 표시되는 사용자에게 일종의 로그 표시를 구현하는 것이 궁금했습니다.

JSF 1.2 및 RF 3.3.3을 사용하기 때문에 다른 요청에 의해 추가 된 모든 메시지를 저장하고 사용자가 해당 한 작업의 역사를 알 수 있도록 사용자에게 표시 할 수 있는지 알고 싶었습니다.또한 지원 팀이 문제의 원인을 분석하는 데 유용하며 모의 또는 디버깅 목적도 필요할 경우 개발자에게 메시지를 보낼 수 있습니다.

또한 FacesMessages가 다른 요청을 통해 다른 요청을 통해 메시지를 저장하기 위해 다른 요청을 통해 메시지를 저장할 수 있습니다.)

을 저장하여 다른 방법으로 처리 할 수 있습니다. 세션 변수이거나 가능합니다 ... 가능한 모든 답변

도움이 되었습니까?

해결책

PhaseListener .예를 들어.

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>
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top