Como passar um parâmetro de uma classe para um xhtml?

Bom tarde,

como passar um parâmetro contendo a “stacktrace” da mensagem de erro, de uma classe que extende “ExceptionHandlerWrapper”, para uma página xhtml.

Por exemplo:

public class JsfExceptionHandler extends ExceptionHandlerWrapper {

	@Override
	public void handle() throws FacesException {
		Iterator<ExceptionQueuedEvent> events = getUnhandledExceptionQueuedEvents().iterator();
		 
		while (events.hasNext()) {
			ExceptionQueuedEvent event = events.next();
			ExceptionQueuedEventContext context = (ExceptionQueuedEventContext) event.getSource();
			
			Throwable exception = context.getException();
			NegocioException negocioException = getNegocioException(exception);
			
			boolean handled = false;
			
			try {
				if (exception instanceof ViewExpiredException) {
					handled = true;
					redirect("/");
				} else if (negocioException != null) {
					handled = true;
					FacesUtil.addErrorMessage(negocioException.getMessage());
				} else {
					handled = true;
					log.error("Erro de sistema: " + exception.getMessage(), exception);
					redirect("/Erro.xhtml");
				}
			} finally {
				if (handled) {
					events.remove();
				}
			}
		}
		
		getWrapped().handle();
	}

Neste exemplo quero passar a stacktrace como String para ser exibida na página Erro.xhtml. Como posso fazer?

O problema é que quando tento usar @Inject ou @ManagedProperty para injetar qualquer bean gerenciado, estou recebendo NPE ou o atributo String que deveria receber a mensagem da stacktrace chega com NULL.

Alguém pode ajudar?

JSF é component based, ou seja, cada elemento no teu xhtml, em teoria, está representando um elemento que existe em um determinado bean.

Eu sou contra exibir o StackTrace num sistema da maneira como diz querer.
O mais adequado e comum é escrever isso em um log e exibir uma mensagem de erro ao usuário.
De qualquer maneira, você pode criar um componente String e exibir o mesmo ou apresentar através de mensagem mesmo.

Concordo plenamente com você.
Mas é isso mesmo que desejo ou seja, escrever um atributo que contenha a stracktrace.

Então, você pode incluir o componente

<h:message>

Ou

<h:messages

E adicionar no teu bean. Tem vários exemplos por aí.

Darlan,

essa é a solução simplista.

Em algum momento o cliente precisa mandar um print da tela.

É claro que poderia ver o log do tomcat.

Preciso injetar um bean CDI que por composição, tenha um atributo String contendo o stacktrace.

O PrimeFaces tem o que vc precisa

https://www.primefaces.org/showcase/ui/misc/exceptionHandler.xhtml

Valeu, isso mesmo.