diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableClassicRenderer.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableClassicRenderer.java index 961867b2d623cffc8a4e92d56d907517c04e26f5..819cfd493f7a728d1f44766eccc970787137f72b 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableClassicRenderer.java +++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableClassicRenderer.java @@ -134,6 +134,7 @@ class FlexiTableClassicRenderer extends AbstractFlexiTableRenderer implements Co FlexiTableElementImpl ftE = ftC.getFlexiTableElement(); FlexiTableColumnModel columnsModel = ftE.getTableDataModel().getTableColumnModel(); int numOfCols = columnsModel.getColumnCount(); + Form theForm = ftE.getRootForm(); // use alternating css class int numOfColumns = 0; @@ -142,7 +143,10 @@ class FlexiTableClassicRenderer extends AbstractFlexiTableRenderer implements Co if(ftE.isMultiSelect()) { target.append("<td>") - .append("<input type='checkbox' name='tb_ms' value='").append(rowIdPrefix).append(row).append("'"); + .append("<input type='checkbox' name='tb_ms' value='").append(rowIdPrefix).append(row).append("'") + .append(" onclick=\"javascript:") + .append(FormJSHelper.getXHRFnCallFor(theForm, ftC.getFormDispatchId(), 1, new NameValuePair("chkbox", Integer.toString(row)))) + .append("\""); if(ftE.isMultiSelectedIndex(row)) { target.append(" checked='checked'"); } diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableElementImpl.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableElementImpl.java index 2f0271c0fb6e97e0ef32db3196d90d9dcb24aea3..e50f08f15608f70de7fc1bcf9030e2831eeb15a9 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableElementImpl.java +++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableElementImpl.java @@ -686,8 +686,11 @@ public class FlexiTableElementImpl extends FormItemImpl implements FlexiTableEle String sort = form.getRequestParameter("sort"); String filter = form.getRequestParameter("filter"); String pagesize = form.getRequestParameter("pagesize"); + String checkbox = form.getRequestParameter("chkbox"); if("undefined".equals(dispatchuri)) { evalSearchRequest(ureq); + } else if(StringHelper.containsNonWhitespace(checkbox)) { + toogleSelectIndex(checkbox); } else if(StringHelper.containsNonWhitespace(page)) { int p = Integer.parseInt(page); setPage(p); @@ -1222,6 +1225,31 @@ public class FlexiTableElementImpl extends FormItemImpl implements FlexiTableEle return multiSelectedIndex != null && multiSelectedIndex.contains(new Integer(index)); } + protected void toogleSelectIndex(String selection) { + if(multiSelectedIndex == null) { + multiSelectedIndex = new HashSet<Integer>(); + } + + String rowStr; + int index = selection.lastIndexOf('-'); + if(index > 0 && index+1 < selection.length()) { + rowStr = selection.substring(index+1); + } else { + rowStr = selection; + } + + try { + Integer row = new Integer(rowStr); + if(multiSelectedIndex.contains(row)) { + multiSelectedIndex.remove(row); + } else { + multiSelectedIndex.add(row); + } + } catch (NumberFormatException e) { + //can happen + } + } + protected void setMultiSelectIndex(String[] selections) { if(multiSelectedIndex == null) { multiSelectedIndex = new HashSet<Integer>();