blz pessoal!
Será que alguem tem algum exemplo para disponibilizar ou saiba de algum lugar que tenha disponivel um exemplo do FileUpload do Richfaces completo para download???
tentei no site deles e tem alguns exemplos , mas não consegui fazer eles funcionarem …
Estou tentando o seguinte
teste.jsp
<rich:fileUpload
addControlLabel="Adicionar..."
clearAllControlLabel="Limpar Todos..."
clearControlLabel="Limpar"
stopControlLabel="Parar"
cancelEntryControlLabel="Limpar"
stopEntryControlLabel="Parar"
uploadControlLabel="Carregar arquivo..."
maxFilesQuantity="3"
id="upload"
immediateUpload="#{FileUploadBean.upload}"
doneLabel="Completo..."
acceptedTypes="jpg, gif, png, bmp">
<a4j:support event="onuploadcomplete" reRender="info" />
<f:facet name="label">
<h:outputText value="{_KB}kb de {KB}bk lidos --- {mm}:{ss}" />
</f:facet>
</rich:fileUpload>
FileUploadBean.java
public void upload(UploadEvent event) throws IOException{
UploadItem item = event.getUploadItem();
ByteArrayOutputStream b = new ByteArrayOutputStream();
b.write(item.getData());
File file = new File(item.getFileName());
b.writeTo(new FileOutputStream("/upload/"+file));
}
web.xml
<filter>
<display-name>Ajax4jsf Filter</display-name>
<filter-name>ajax4jsf</filter-name>
<filter-class>org.ajax4jsf.Filter</filter-class>
<init-param>
<param-name>createTempFiles</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>maxRequestSize</param-name>
<param-value>20000000</param-value>
</init-param>
</filter>
A tela começa a carregar e fica parada não conclui nunca… no console ele printa
org.ajax4jsf.context.AjaxContextImpl convertId
WARNING: Target component for id info not found
Como eu não tenho muita experiencia se alguem ai puder ajudar… Obrigado!!!
vou ir tentando encontrar alguma coisa se achar eu posto aqui …
A[]´s
mais ou menos assim :
<rich:fileUpload id="upload"
addControlLabel="Selecionar arquivo..."
clearAllControlLabel="Limpar Todos"
clearControlLabel="Limpar"
cancelEntryControlLabel="Cancelar"
progressLabel="Carregando"
stopControlLabel="Parar"
uploadControlLabel="Salvar"
doneLabel="Finalizado"
listHeight="50px"
autoclear="false"
maxFilesQuantity="1"
immediateUpload="false"
acceptedTypes="pdf"
allowFlash="#{ManterUpLoad.useFlash}"
fileUploadListener="#{ManterUpLoad.listenerManual}">
<f:facet name="label">
<h:outputText value="{_KB}KB para {KB}KB uploaded --- {mm}:{ss}" />
</f:facet>
</rich:fileUpload>
Classe
/**
* Listener responsável por manipular arquivo de manual do usuário
* para Upload de arquivo.
*
* @param event
*/
public void listenerManual(UploadEvent event) {
FacesContext ctx = FacesContext.getCurrentInstance();
ServletContext servletContext = (ServletContext) ctx.getExternalContext().getContext();
String path = servletContext.getRealPath("/internas/manual/");
String arquivo = event.getUploadItem().getFileName();
try {
UploadItem item = event.getUploadItem();
FileInputStream fis = new FileInputStream(item.getFile());
FileOutputStream out = new FileOutputStream(path + "/manual_recebido.tmp");
int bytes = 0;
byte[] bteFile = new byte[1024];
while ((bytes = fis.read(bteFile)) != -1) {
out.write(bteFile, 0, bytes);
}
Runtime.getRuntime().exec("mv " + path + "/manual.pdf " + path + "/manual.pdf.old");
Runtime.getRuntime().exec("mv " + path + "/manual_recebido.tmp " + path + "/manual.pdf");
//Efetuando o registro no log
LogControle log = new LogControle();
try {
//Inserção para verificação do Usuário(Administrador)
String sql = "INSERIU MANUAL DO USUÁRIO: " + arquivo;
log.inserir(sql);
} catch (Exception excecao) {
logger.error("Erro ao tentar registra o log de upload de arquivo", excecao);
}
} catch (Exception excecao) {
logger.error("Erro ao tentar efetuar o upload de arquivo", excecao);
}
}
espero que ajude … abraço!!
hum…faz tempo que mexi com ele e não tive problemas…tenta o seguinte, inclui isso na tag de upload
fileUploadListener="#{FileUploadBean.upload}" //metodo que faz recebe upload
Essa propriedade que você usou
immediateUpload="#{fileUploadBean.autoUpload}"
é um boolean
da um olhada neste link:
http://livedemo.exadel.com/richfaces-demo/richfaces/fileUpload.jsf?tab=usage&cid=558415
altitdb
Novembro 24, 2009, 4:08pm
#5
<rich:fileUpload id="upload" required="true"
fileUploadListener="#{fileUploadBean.listener}"
maxFilesQuantity="#{fileUploadBean.uploadsAvailable}"
immediateUpload="#{fileUploadBean.autoUpload}"
allowFlash="#{fileUploadBean.useFlash}"
listHeight="60"
acceptedTypes="jpg"
addControlLabel="Adicionar"
clearControlLabel="Limpar"
doneLabel="ConcluÃdo"
stopControlLabel="Cancelar"
uploadControlLabel="Enviar"
sizeErrorLabel="Tamanho Não Permitido"
clearAllControlLabel="Limpar Todos"
cancelEntryControlLabel="Cancelar"
transferErrorLabel="A Imagem Não Foi Salva!" >
<a4j:support event="onuploadcomplete" action="#{imagemFaces.yesClick}" reRender="salvar" />
<a4j:support event="onclear" action="#{imagemFaces.notClick}" reRender="upload, salvar" />
</rich:fileUpload>
Cara eu Faço assim, na hora que eu seleciono ele já faz o up.
[quote]public class FileUploadBean{
private ArrayList<Files> filesa = new ArrayList<Files>();
private int uploadsAvailable = 1;
private boolean autoUpload = false;
private boolean useFlash = false;
Files files = new Files();
static byte[] ByteImg;
public FileUploadBean() {
}
public int getSize() {
if (getFilesa().size()>0){
return getFilesa().size();
}else
{
return 0;
}
}
public void paint(OutputStream stream, Object object) throws IOException {
stream.write(getFilesa().get((Integer)object).getData());
}
public void listener(UploadEvent event){
UploadItem item = event.getUploadItem();
files.setLength(item.getData().length);
files.setName(item.getFileName());
files.setData(item.getData());
filesa.add(files);
ByteImg = files.getData();
uploadsAvailable--;
}
public String clearUploadData() {
filesa.clear();
setUploadsAvailable(1);
return null;
}
public ArrayList<Files> getFilesa() {
return filesa;
}
public void setFilesa(ArrayList<Files> files) {
this.filesa = files;
}
public int getUploadsAvailable() {
return uploadsAvailable;
}
public void setUploadsAvailable(int uploadsAvailable) {
this.uploadsAvailable = uploadsAvailable;
}
public boolean isAutoUpload() {
return autoUpload;
}
public void setAutoUpload(boolean autoUpload) {
this.autoUpload = autoUpload;
}
}[/quote]
valew pessoal as dicas …
Harry Podre dei uma vacilada ali … hehehe … to parecendo criança, saindo do delphi pro jsf … até os erros eu acho legal
Fiquei com umas duvidas … o zurfzera postou um codigo legal e fui usar ele … até ai blz.
as duvidas que apareceram :
#1 - quando a gente habilita no web.xml o createTempFiles para o filtro do richfaces os uploads vão para a pasta Temp do SO ? tipo c:\windows\temp ? é isso mesmo? tem outro jeito ? no link que o Harry passou estava falando alguma coisa sobre isso…
http://docs.jboss.org/richfaces/latest_3_3_X/en/devguide/html/rich_fileUpload.html
#2 - outra Runtime.getRuntime().exec isso funciona nas plataformas da MS também ? não conhecia isso, achei muito bom… vou pesquisar mais sobre !
#3 - fui debugando pra ver o que tava acontecendo, depois q coloquei o listener q o surfzera mandou … Quando passa o while o arquivo teoricamente teria que estar gravado … but meu path ficou assim C:\projetos\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\upload1\manual - tenho que fazer o que pra ele gravar na pasta “manual” ? no meu caso não vou renomear ou mover os arquivos (comentei o Runtime)… é só jogar lá e boa.
Caras agradeço muito pela ajuda…até agora a experiencia com o jsf tem sido muito boa espero chegar logo ao nivel de v6…
A[]'s
Respondendo minhas perguntas …
a #1 o link abaixo já explica
a #2 sobre o Runtime
http://www.rgagnon.com/javadetails/java-0014.html
tem alguns exemplos e outros links na pagina sobre o assunto
a #3 para iniciantes como eu … era porque eu estava rodando no eclipse … se testarem com um caminho fixo tipo C:/teste/upload já funciona
se colocarem em produção com a getRealPath funciona !
Obrigado!
A[]´s