この問題に適した解決策を見つけました。コードサンプルは次のとおりです。
public class CustomCellTableBuilder extends AbstractCellTableBuilder<Object>{
//here go fields, ctor etc.
//ids of elements which details we are going to show
private Set elements;
@Override
protected void buildRowImpl(Object rowValue, int absRowIndex){
//building main rows logic
if(elements.contains(absRowIndex)){
buildExtraRow(absRowIndex, rowValue);
elements.add(absRowIndex);
}
}
private void buildExtraRow(int index, Object rowValue){
TableRowBuilder row = startRow();
TableCellBuilder td = row.startTD().colSpan(getColumns().size());
DivBuilder div = td.startDiv();
Widget widget = new Widget();
//update widget state and appearance here depending on rowValue
div.html(SafeHtmlUtils.fromTrustedString(widget.getElement().getInnerHTML()));
div.end();
td.endTD();
row.endTR();
}}
余分な行の出現につながるイベントを処理するときは、TableBuilder にアタッチされている CellTable で redrawRaw(rowIndex) を呼び出す必要があることに注意してください。そして、この呼び出しの前に、ターゲット行 ID をエレメント Set に追加する必要があります。
これがお役に立てば幸いです。