Problème de rafraîchissement d'écran avec h:selectBooleanCheckbox dans un h:dataTable
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:
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:
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...
:traine:
Quelqu'un a une idée pour me remettre sur les rails?