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();
}
Quando você clica no botão na sua tela, ele pelo menos acessa o método desejado!?
Opá valew guilhermehkr por responder,
Entao, executa sim, mas nao faz nada é o unico método que nao faz nada na ManagedBean
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.
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.
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
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
se pelo main esta executando sera que voce nao esta sem permissao de escrita no conteiner da aplicacao ?
o metodo esta sendo chamado realmente?
[quote]se pelo main esta executando sera que voce nao esta sem permissao de escrita no conteiner da aplicacao ?
[/quote]
Como faço pra editar essa configuração no container da aplicação ?
Sim.
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.
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 ?
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.
Cara consegui, mas tive que colocar o caminho completo, sabe fazer caminho relativo ?
no seu MB voce pode pegar o caminho do root
[code] HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
String caminho = request.getServletContext().getRealPath("/");
[/code]
de um sysoutprint no caminho para ver.
Isso só vai funcionar quando tiver feito o deploy, nao ?
Sim, nao sei qual servidor voce esta usando, mas pro exemplo, esse codigo
[code]HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
System.out.println(request.getServletContext().getRealPath("/"));[/code]
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.