Salut,

Je m'inspire de sources qui fonctionnent, mais moi quand je l'utilise pour mes tests, ça ne fonctionne pas.

Je veux, pour tester, mettre à jour une image dessinée sur un Graphics2D, soit lorsque l'on déplace un slider, soit lorsque l'on clique sur un bouton.

Voici un bout de ma jsp :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
<h:form>
    <rich:inputNumberSlider showInput="false" showBoundaryValues="true" showToolTip="false" value="#{paintData.radius}" step="1" minValue="10" maxValue="50">
        <a4j:support event="onchange" reRender="painter" />
        <f:convertNumber />
    </rich:inputNumberSlider>
</h:form>
 
<a4j:commandLink  styleClass="button" rendered="true"  value="refresh" action="#{paintData.random}" reRender="painter" />
 
<rich:paint2D id="painter" width="300" height="300" format="png" data="#{paintData}" paint="#{paintBean.paint}" />
Voici PaintBean.java:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
import java.awt.Color;
import java.awt.Graphics2D;
 
public class PaintBean {
 
	public void paint(Graphics2D g, Object obj) {
		System.out.println("********** PAINT ************");
		g.setColor(Color.RED);
		PaintData data = (PaintData) obj;
		g.fillOval(100, 100, data.getRadius(), data.getRadius());
	}
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import java.io.Serializable;
import java.util.Random;
 
public class PaintData implements Serializable {
 
	private static final Random RANDOM = new Random();
 
	private int radius = 15;
 
	public int getRadius() {
		return radius;
	}
 
	public void setRadius(int radius) {
		this.radius = radius;
	}
 
	public void random() {
		setRadius(RANDOM.nextInt(40) + 10);
	}
 
}
La méthode paint() est bien appelée lors du chargement de la page, mais quand je clique sur le bouton ou que je déplace le slider, elle n'est pas réappelée...

Comment faire cela?

Merci de votre aide, je débute en JSF

PS: comme valeur de reRender, j'ai écrit "painter", mais j'ai vu parfois ":painter" (avec un ':' devant), dans les deux cas ça ne marche pas pour moi...