[Not Resolved] fileUpload attribute "update" works strange

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:

[code]<?xml version="1.0" encoding="UTF-8"?>

<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>

[/code]

My page with fileUpload and graphicImage:

[code]<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}" />[/code]

My Bean:

[code]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);
    }[/code]

Thanks!

Pq postar em inglês? :shock:

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

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

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

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

[quote=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[/quote]

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…

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.

[quote=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.[/quote]

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… :?

Que estranho…

O escopo do seu bean tá REQUEST ou SESSION?

[quote=Foxlol]Que estranho…

O escopo do seu bean tá REQUEST ou SESSION?[/quote]

SESSION

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

Flw ae

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

Flw ae[/quote]

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… :?