[Not Resolved] fileUpload attribute "update" works strange

12 respostas
caram_junior

Hi!

I'm new in PrimeFaces.
I'm trying to use fileUpload to upload a image and automatically display it in a graphicImage. What happens:
1) When I visit the page first time, upload the image, it displayed automatically in graphicImage. Fine!
2) When I execute step 1 above, and execute step 1 again (yes, think I get the wrong image first time) the second image isn't displayed in graphicImage, keeps the first image.
3) When I execute step 2 above, and refresh (F5) the page, shows the second image.

I'm using:
NetBeans 6.8;
GlassFish 3;
JSF 2;

My web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

    <servlet>
        <servlet-name>Resource Servlet</servlet-name>
        <servlet-class>
            org.primefaces.resource.ResourceServlet
        </servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Resource Servlet</servlet-name>
        <url-pattern>/primefaces_resource/*</url-pattern>
    </servlet-mapping>
    <filter>
        <filter-name>PrimeFaces FileUpload Filter</filter-name>
        <filter-class>
            org.primefaces.webapp.filter.FileUploadFilter
        </filter-class>
    </filter>
    <filter-mapping>
        <filter-name>PrimeFaces FileUpload Filter</filter-name>
        <servlet-name>Faces Servlet</servlet-name>
    </filter-mapping>
    <context-param>
        <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
        <param-value>server</param-value>
    </context-param>

    <context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Development</param-value>
    </context-param>
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>/faces/*</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>faces/index.xhtml</welcome-file>
    </welcome-file-list>
</web-app>
My page with fileUpload and graphicImage:
<h:outputLabel value="#{bundle.photo}" for="photo" />
                    <p:graphicImage id="photo"
                                    value="#{personBean.image}" />

                    <h:outputLabel value="#{bundle.photo}" for="photo" />
                    <p:fileUpload id="facePhoto" label="#{bundle.open}"
                                  auto="true"
                                  multiple="false"
                                  update="photo"
                                  fileUploadListener="#{personBean.handleFileUpload}" />
My Bean:
UploadedFile file;
    private StreamedContent imageFace;

    public StreamedContent getImage() {
        System.out.println("personBean.getImage");
        if(imageFace != null) {
            System.out.println(imageFace.toString());
        }
        return imageFace;
    }

    public void setImage(StreamedContent imageFace) {
        System.out.println("personBean.setImage");
        this.imageFace = imageFace;
    }

    public void handleFileUpload(FileUploadEvent event) {
        System.out.println("personBean.handleFileUpload");

        this.file = event.getFile();
        try {
            setImage(new DefaultStreamedContent(this.file.getInputstream(), this.file.getContentType()));
        } catch (IOException ex) {
            Logger.getLogger(PersonBean.class.getName()).log(Level.SEVERE, null, ex);
        }

Thanks!

12 Respostas

Foxlol

Pq postar em inglês? :shock:

caram_junior

Peço sinceras desculpas, postei primeiro no fórum do PrimeFaces e lá é em inglês. Acha necessário mudar para português?

Foxlol

De boa, eh q achei estranho pq tu nao eh gringo hehe…flw

caram_junior

Valeu…rs… Pior é que não estou conseguindo resolver esse problema, estou desanimando… :cry:

Foxlol

Cara, nunca mexi com prime faces, mas o componente de upload tem alguma propriedade para dar um reRender em algum outro componente? Tipo o do rich faces.

Aí no caso vc mandaria dar um reRender no componente de imagem.

Flw

caram_junior

Foxlol:
Cara, nunca mexi com prime faces, mas o componente de upload tem alguma propriedade para dar um reRender em algum outro componente? Tipo o do rich faces.

Aí no caso vc mandaria dar um reRender no componente de imagem.

Flw

Sim, tem o “update=”"" fiz isso, na primeira vez que seleciono uma imagem ele altera o componente informado. Se eu tentar fazer o upload de novo, ele faz mas não atualiza o componente. Se eu der um F5 a imagem selecionada pela segunda vez aparece, sacou?

Eu tentei usar o Rich mas não tive êxito, parei na configuração: http://community.jboss.org/wiki/RichFaces333andJSF20

Estou pensando em tentar de novo o Rich…

Foxlol

Vc já viu se o mesmo ocorre em outros browsers?

Tem algum form aninhado? As vezes (no rich faces) davas uns erros loucos por causa disso.

caram_junior

Foxlol:
Vc já viu se o mesmo ocorre em outros browsers?

Tem algum form aninhado? As vezes (no rich faces) davas uns erros loucos por causa disso.

Segui sua dica, vamos lá:

  1. No IE 8 acontece o que eu já expliquei nos posts acima.
  2. No Chrome eu consigo atualizar (upload) duas vezes e funciona na boa, na terceira não atualiza a imagem.
  3. Só tenho um form.

Obrigado pela dica, já mudou com o Chrome, mas ainda não está legal. O que eu reparei é que, quando funciona, o método para pegar a imagem (getImage), é chamado duas vezes e, quando não funciona, é chamado apenas uma vez. Na minha opinião deveria funcionar chamando o método apenas uma vez… Cada vez mais perdido estou… :?

Foxlol

Que estranho…

O escopo do seu bean tá REQUEST ou SESSION?

caram_junior

Foxlol:
Que estranho…

O escopo do seu bean tá REQUEST ou SESSION?

SESSION

Foxlol

Putz, não to enxergando o que possa ser, vou dar uma procurada na net e qlqr coisa posto aí.

Flw ae

caram_junior

Foxlol:
Putz, não to enxergando o que possa ser, vou dar uma procurada na net e qlqr coisa posto aí.

Flw ae

Valeu, fica um outro detalhe:

Tenho outros campos de input no form, no fim tenho um h:commandLink que submete. Suponha que eu tenha carregado a primeira imagem, funciona certo e atualiza a imagem na página, a segunda vez que faço isso, apesar de atualizar o atributo de imagem no bean, não atualiza na página. Aí, se eu clicar no h:commandLink ele atualiza a imagem que submeti pela segunda vez pois, como não preenchi os outros inputs, ele valida e retorna a mesma página… :?

Criado 5 de maio de 2010
Ultima resposta 6 de mai. de 2010
Respostas 12
Participantes 2