Bonjour.
Je débute en JSF, et je rencontre un problème de rafraîchissement d'écran...

A l'exécution, le code suivant se comporte d'une manière que je ne m'explique pas... Je voudrais, quand le statut d'un "Todo" change (select/unselect d'un checkbox), que la ligne soit barrée (style lineThrough) ou pas, selon que la case est cochée ou pas...

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
 
<h:form id="todoForm">
	<h:dataTable id="todos"
		columnClasses="columnDesc, columnStatus"
		styleClass="tableScrollLayout"
		value="#{TodoListBean.todoList.dataModel}" var="todo">
...
		<h:column id="descCol">
			<h:outputText value="#{todo.todoDescription}"
				styleClass="#{todo.statusTreated ? 'lineThrough' : ''} textLayout"
				id="desc" />
		</h:column>
 
		<h:column id="statusCol">
			<h:selectBooleanCheckbox value="#{todo.statusTreated}" onchange="submit()" >
			</h:selectBooleanCheckbox>
		</h:column>
 
	</h:dataTable>
...
</h:form>
...
Mon problème est que la page n'est rafraîchie qu'une fois sur deux...
J'ai une liste de 6 objets 'TodoListItem', quand j'en sélectionne un (le premier), la case est cochée mais rien ne se passe.

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
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
public class TodoListItem {
 
	private String todoDescription = null;	// short description (title of the todo)
 
	private Status status = null;
 
 
	/**
         * @return
         */
	public String getTodoDescription() {
		return todoDescription;
	}
 
	/**
         * @param string
         */
	public void setTodoDescription(String string) {
		todoDescription = string;
	}
 
	/**
         * 
         * @param treated: true if the status is 'treated', false if it is 'not treated'
         */
	public void setStatusTreated(boolean treated) {
 
		Status status = new Status();
		if (treated) {
			System.out.println(
				"************ set code to Treated (set) **************");
			status.setCode(ToDoStatusCode.TREATED);
		} else {
			System.out.println(
				"************ set code to Not_Treated (set) **************");
			status.setCode(ToDoStatusCode.NOT_TREATED);
		}
		status.setCodeId(ToDoStatusCode.MY_NAME);
		this.status = status;
	}
 
	public boolean isStatusTreated() {
		return ToDoStatusCode.TREATED.equals(this.status.getCode());
	}
}
Dans un second temps, j'en sélectionne un autre (le deuxième), la première ligne passe en lineThrough et la seconde est décochée.
Je coche la 6ème: rien. Je coche la 4ème: la sixième est barrée et la 4ème décochée.
En gros, c'est comme si le submit n'était fait qu'une fois sur deux...

Quelqu'un a une idée pour me remettre sur les rails?