Método nao executa em ManagedBean

16 respostas
renatorudolf

Bom dia, tenho o seguinte método na minha ManagedBean, porém nao consigo executar clicando em um botão no xhtml(primefaces), alguem sabe me dizer porque o arquivo não é escrito ?

Obs: Dentro de um main esse método funciona normal.

public void testaExecuta() throws IOException{
		File arquivo = new File("arquivo.txt");
		OutputStream os = new FileOutputStream(arquivo);
		OutputStreamWriter osw = new OutputStreamWriter(os);
		BufferedWriter bw = new BufferedWriter(osw);
		bw.write("Escreve no arquivo");
		bw.close();
		
	}

16 Respostas

guilhermehkr

Quando você clica no botão na sua tela, ele pelo menos acessa o método desejado!?

renatorudolf

Opá valew guilhermehkr por responder,

Entao, executa sim, mas nao faz nada é o unico método que nao faz nada na ManagedBean :frowning:

guilhermehkr

Renato.

Eu não manjo muito de java IO, mas testei o seu código no Junit e realmente cria o arquivo …
Não vejo por qual motivo a criação do arquivo não seria feita pelo button também.
Não há nenhum log de erro ?

Você debugou este acesso ao método se utiizando do button da tela ?!
Vou tentar montar uma apliaçõa rápida aqui para testar isto.

renatorudolf

Não ha.

E outra, adicionei o metodo testaExecuta dentro de outro método para que assim fosse executado junto a outro processo, e o arquivo ainda nao foi gerado.

renatorudolf

De log, me aparece esse Warning:

WARNING: PWC4011: Unable to set request character encoding to UTF-8 from context /Relatorio, because request parameters have already been read, or ServletRequest.getReader() has already been called
renatorudolf

Quanto ao

resolvi da seguinte forma:

<parameter-encoding default-charset="utf-8"/>

link:http://javaevangelist.blogspot.com/2012/01/glassfish-default-encoding-iso-8859-1.html

RicardoYukito

se pelo main esta executando sera que voce nao esta sem permissao de escrita no conteiner da aplicacao ?
o metodo esta sendo chamado realmente?

renatorudolf

se pelo main esta executando sera que voce nao esta sem permissao de escrita no conteiner da aplicacao ?

Como faço pra editar essa configuração no container da aplicação ?

Sim.

renatorudolf

aluem ? :frowning:

guilhermehkr

Eu fiz um teste aqui e consegui gravar no arquivo, porém em um pasta que tenho permissão.
Montei um aplicação JSF simples e fiz o acesso ao método e gravei em um arquivo na pasta pessoal.

Se você diz que o método do ManegedBean esta sendo acessado e não esta retornando nenhuma excessão, também chego a conclusão de que possa ser permissões.
Tenho alguns links sobre isto, quando acha-los compartilho.

renatorudolf

Ficaria desse jeito ?

File arquivo = new File("./pastaPessoal/arquivo.txt");

e daria permissão pelo eclipse mesmo na pasta ou no servidor de aplicação ?

guilhermehkr

Aqui eu só coloquei:

path = "/home/pastaPessoal/arquivo.txt";

então, sobre a permissão no container eu não sei, mas estou procurando algo sobre para acrescentar aqui.

renatorudolf

Cara consegui, mas tive que colocar o caminho completo, sabe fazer caminho relativo ?

RicardoYukito
no seu MB voce pode pegar o caminho do root
HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
			String caminho = request.getServletContext().getRealPath("/");

de um sysoutprint no caminho para ver.

renatorudolf

Isso só vai funcionar quando tiver feito o deploy, nao ?

RicardoYukito

Sim, nao sei qual servidor voce esta usando, mas pro exemplo, esse codigo

HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();   
		System.out.println(request.getServletContext().getRealPath("/"));
se voce estiver rodando o projeto na sua ide, o tomcat no meu caso cria um diretorio webApps fisico dentro do meu workspace. Voce precisa dar permissao nesse diretorio que ele criar se for o caso.
Criado 17 de julho de 2012
Ultima resposta 18 de jul. de 2012
Respostas 16
Participantes 3