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...
Mon problème est que la page n'est rafraîchie qu'une fois sur deux...
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> ...
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.
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.
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()); } }
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?
Partager