Die Zellen einer Celltable werden ja normalerweise in über die Column definiert, allerdings kann es ja sein dass bestimmte Zellen in einer Zeile "anders" sein sollen. In meinem Fall wollte ich zeilenabhängig bestimmte Felder verstecken, der Rest sollten ganz normale TextInputCells sein. Dazu habe ich mir einfach den Code der TextInputCell kopiert und ein bisschen erweitert.
Zum einen eine Instanzvariable hidden hinzugefügt, die ich beim Instanzieren mal false setze, da wenn nicht anders entschieden das Feld nicht versteckt sein soll.
public ExtendendedBrowserEventsTextInputCell() { super(BrowserEvents.CHANGE, BrowserEvents.KEYUP, BrowserEvents.KEYPRESS); this.hidden = false; if (template == null) { template = GWT.create(Template.class); } }
Und zum anderen in der getValue der Spalte mal abgefragt ob ich in der richtigen Zeile bin und dort das hidden gesetzt.
private final class TestColumn extends Column<String[], String> { int index; ListDataProvider<String []> provider; public TestColumn(int index, ListDataProvider<String[]> provider, Cell cell) { super(cell); this.index = index; this.provider = provider; } @Override public String getValue(String[] object) { if (provider != null && provider.getList().indexOf(object) > 0 && this.getCell() instanceof ExtendendedBrowserEventsTextInputCell) { ExtendendedBrowserEventsTextInputCell cell = (ExtendendedBrowserEventsTextInputCell) this.getCell(); cell.hidden = true; } return object[index]; } }
Die render Methode der Cell erweitern, da ich weiß das die Felder die ich treffen will, keinen Inhalt haben funktioniert das so:
@Override public void render(Context context, String value, SafeHtmlBuilder sb) { // Get the view data. Object key = context.getKey(); ViewData viewData = getViewData(key); if (viewData != null && viewData.getCurrentValue().equals(value)) { clearViewData(key); viewData = null; } String s = (viewData != null) ? viewData.getCurrentValue() : value; if (s != null) { sb.append(template.input(s)); } else if (hidden) { sb.appendHtmlConstant("<input type=\"hidden\" tabindex=\"-1\"></input>"); } else { sb.appendHtmlConstant("<input type=\"text\" tabindex=\"-1\"></input>"); } }
Schon verschwinden Felder aus der CellTable.
Keine Kommentare:
Kommentar veröffentlichen