Skip to content

Commit 3d8e4e1

Browse files
committed
#486 clear the clientId cache before rendering a new row
1 parent 7fdb859 commit 3d8e4e1

1 file changed

Lines changed: 22 additions & 1 deletion

File tree

src/main/java/net/bootsfaces/component/dataTable/DataTableRenderer.java

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import java.util.ArrayList;
2323
import java.util.Arrays;
2424
import java.util.HashSet;
25+
import java.util.Iterator;
2526
import java.util.List;
2627
import java.util.Map;
2728
import java.util.Set;
@@ -218,7 +219,7 @@ private void generateBody(FacesContext context, DataTable dataTable, ResponseWri
218219
rw.writeText(value, null);
219220
}
220221

221-
column.encodeChildren(context);
222+
renderChildrenOfColumn(column, context);
222223
rw.endElement("td");
223224
}
224225
rw.endElement("tr");
@@ -227,7 +228,27 @@ private void generateBody(FacesContext context, DataTable dataTable, ResponseWri
227228
rw.endElement("tbody");
228229
dataTable.setRowIndex(-1);
229230
}
231+
232+
private void renderChildrenOfColumn(UIComponent column, FacesContext context) throws IOException {
233+
resetClientIdCacheRecursively(column);
234+
column.encodeChildren(context);
235+
}
236+
237+
private void resetClientIdCacheRecursively(UIComponent c) {
238+
String id=c.getId();
239+
if (null != id) {
240+
c.setId(id); // this strange operation clears the cache of the clientId
241+
}
242+
Iterator<UIComponent> children = c.getFacetsAndChildren();
243+
if (children != null) {
244+
while (children.hasNext()) {
245+
UIComponent kid = children.next();
246+
resetClientIdCacheRecursively(kid);
247+
}
248+
}
249+
}
230250

251+
231252
private void generateHeader(FacesContext context, DataTable dataTable, ResponseWriter rw) throws IOException {
232253
rw.startElement("thead", dataTable);
233254
rw.startElement("tr", dataTable);

0 commit comments

Comments
 (0)