PRIMEFACES - 如何刷新<p:graphicimage>单击<p:commandbutton>?</p:commandbutton> </p:graphicimage>

时间:2013-12-30 19:19:51

标签: ajax jsf-2 primefaces captcha page-refresh

我正在考虑这个展示:http://www.primefaces.org/showcase/ui/dynamicImage.jsf特别是“动态图形文本”子案例。

我的问题是通过添加a来实现此子案例的扩展版本。当按下按钮时,我需要图像改变。

在DynamicImageController类中,我重新编写了与graphicImage相关联的getter:

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

我有这个按钮:

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

和图片:

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

idForm是包含我的graphicImage和commandButton

的表单的表单id

我的问题是:

为什么我按下键盘上的F5按钮,图像随机变化与getGraphicText方法中的所需行为一致? 为什么当我按下按钮时图像不会改变?

感谢。

PS。我真正的问题是jcaptcha在primefaces中的集成,我的集成几乎是有效的,我只想念验证码图像的刷新按钮

2 个答案:

答案 0 :(得分:11)

默认情况下,graphicImage会缓存图像 在cache上将false属性设置为p:graphicImage 这样的事情:
<p:graphicImage value="#{dynamicImageController.graphicText}" cache="false" />

答案 1 :(得分:2)

好的更新:问题是我在这里讨论过问题的错误:

http://forum.primefaces.org/viewtopic.php?f=3&t=35637&p=113830#p113830