PRIMEFACES - Wie aktualisiere ich ein <p: graphicImage> durch Klicken auf einen <p: commandButton>?

Ich denke über dieses Schaufenster nach:http://www.primefaces.org/showcase/ui/dynamicImage.jsf insbesondere der Unterfall "GraphicText on-the-fly".

Mein Problem ist die Implementierung einer erweiterten Version dieses Unterfalls mit dem Zusatz von a. Wenn der Knopf gedrückt wird, muss sich das Bild dynamisch ändern.

In der DynamicImageController-Klasse habe ich den Getter für graphicImage umgeschrieben:

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

Ich habe diesen Knopf:

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

und das Bild:

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

idForm ist die Formular-ID des Formulars, das mein graphicImage und mein commandButton enthält

Meine Frage ist:

Warum ändert sich das Bild zufällig, wenn ich die Taste F5 auf der Tastatur drücke, entsprechend dem gewünschten Verhalten in der Methode getGraphicText? Und warum ändert sich das Bild nicht, wenn ich den Knopf drücke?

Vielen Dank.

ps. mein eigentliches problem ist die integration von jcaptcha in primefaces, meine integration ist fast abgeschlossen, ich vermisse nur die aktualisierungsschaltfläche für das captcha-bild

Antworten auf die Frage(2)

Ihre Antwort auf die Frage