PRIMEFACES - Jak odświeżyć <p: graphicImage> przed kliknięciem <p: commandButton>?

Rozważam tę wizytówkę:http://www.primefaces.org/showcase/ui/dynamicImage.jsf w szczególności pod-przypadek „GraphicText w locie”.

Moim problemem jest wdrożenie rozszerzonej wersji tego sub-przypadku z dodatkiem a. Po naciśnięciu przycisku potrzebuję, aby obraz zmienił się dinamicznie.

W klasie DynamicImageController przepisałem gettera przypisanego do grafikiImage:

public StreamedContent getGraphicText(){
     double random = Math.random();// a double value with a positive sign, greater than or equal to 0.0 and less than 1.0.
     if(random>0.5){
         BufferedImage bufferedImg = new BufferedImage(100, 25, BufferedImage.TYPE_INT_RGB);  
         Graphics2D g2 = bufferedImg.createGraphics();  
         g2.drawString("This is a text", 0, 10);  
         ByteArrayOutputStream os = new ByteArrayOutputStream();  
         try {
            ImageIO.write(bufferedImg, "png", os);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }  
         graphicText = new DefaultStreamedContent(new ByteArrayInputStream(os.toByteArray()), "image/png");
     } else {
         BufferedImage bufferedImg = new BufferedImage(100, 25, BufferedImage.TYPE_INT_RGB);  
         Graphics2D g2 = bufferedImg.createGraphics();  
         g2.drawString("This is another text", 0, 10);  
         ByteArrayOutputStream os = new ByteArrayOutputStream();  
         try {
            ImageIO.write(bufferedImg, "png", os);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }  
         graphicText = new DefaultStreamedContent(new ByteArrayInputStream(os.toByteArray()), "image/png");
     }
     return graphicText;
 }

Mam ten przycisk:

<p:commandButton id="refreshImageButton" value="Refresh image random">
                <p:ajax update=":idForm" />
             </p:commandButton>

i obraz:

<p:graphicImage value="#{dynamicImageController.graphicText}" />

idForm to id formularza w postaci zawierającej mój graphicImage i mój przycisk CommandButton

Moje pytanie brzmi:

Dlaczego, jeśli nacisnę przycisk F5 na klawiaturze, obraz zmieni się losowo zgodnie z pożądanym zachowaniem w metodzie getGraphicText? A dlaczego po naciśnięciu przycisku obraz się nie zmienia?

Dzięki.

ps. moim prawdziwym problemem jest integracja jcaptcha w primefaces, moja integracja jest prawie zakończona, brakuje mi tylko przycisku odświeżania obrazu captcha

questionAnswers(2)

yourAnswerToTheQuestion