GWT: CellBrowser не отображается в композитном
Пожалуйста, мне нужна твоя помощь. Я создал CellBrowser с UiBinder, который я заполняю из базы данных. Проблема в том, что я не могу отобразить его с помощью метода InitWidget. Но если я прикреплю его непосредственно к RootPanel (используя инструкцию: RootPanel.get(). Add(cellBrowser);), он будет отображен, но поверх других копонентов, которые присоединены к композиту (он станет настоящим беспорядком:/). Я поместил его в HTMLPanel, но он не работает.
Как я могу прикрепить его к композиту и отобразить с другими виджетами? (Я пробовал другие панели, но это не сработало:/).
Вот мой код:
Файл UiBinder:
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
xmlns:g="urn:import:com.google.gwt.user.client.ui" xmlns:c='urn:import:com.google.gwt.user.cellview.client'>
<ui:style>
#errors {
color: red;
}
#success {
color: green;
}
.arrondie {
border: 1px solid black;
-moz-border-radius: 7px;
-webkit-border-radius: 7px;
border-radius: 7px;
background-color: #FFFFCC;
}
</ui:style>
<g:HorizontalPanel>
<g:HTMLPanel>
<table align="center" id="arrondie">
<tr>
<td colspan="3" align="center">
<div id="errors" align="center"></div>
<br />
<div id="success" align="center"></div>
</td>
</tr>
<tr>
<td>
<g:Label text="Unit's family:" />
</td>
<td colspan="2">
<g:TextBox width="15em" ui:field="familyName" />
</td>
</tr>
<tr>
<td>
<g:Label text="Unit:" />
</td>
<td>
<g:TextBox width="15em" ui:field="unitName" />
</td>
<td>
<g:Button ui:field="addUnit" text="Add unit" />
</td>
</tr>
<tr>
<td colspan="3" align="center">
<g:Button ui:field="submit" text="Submit" />
</td>
</tr>
</table>
</g:HTMLPanel>
<g:HTMLPanel>
<c:CellBrowser defaultColumnWidth='300' ui:field='cellBrowser' />
</g:HTMLPanel>
</g:HorizontalPanel>
</ui:UiBinder>
Вид:
public class UniteViewImpl extends Composite implements UniteView {
private Presenter presenter;
private static UniteViewImplUiBinder uiBinder = GWT.create(UniteViewImplUiBinder.class);
private ListDataProvider<FamilleUniteProxy> dataProvider;
interface UniteViewImplUiBinder extends UiBinder<Widget, UniteViewImpl> {
}
@SuppressWarnings("deprecation")
public UniteViewImpl() {
dataProvider = new ListDataProvider<FamilleUniteProxy>(
new ArrayList<FamilleUniteProxy>());
TreeViewModel model = new CustomTreeModel(dataProvider);
cellBrowser = new CellBrowser(model, null);
cellBrowser.setKeyboardSelectionPolicy(KeyboardSelectionPolicy.ENABLED);
cellBrowser.setHeight("200");
cellBrowser.setWidth("630");
RootPanel.get().add(cellBrowser); // If I delete this line, the cellBrowser is not displayed
initWidget(uiBinder.createAndBindUi(this));
}
@UiField
TextBox familyName;
@UiField
TextBox unitName;
@UiField
Button addUnit;
@UiField
Button submit;
@UiField(provided = true)
CellBrowser cellBrowser;
public UniteViewImpl(String firstName) {
initWidget(uiBinder.createAndBindUi(this));
}
@Override
public void setPresenter(Presenter presenter) {
this.presenter = presenter;
}
public void updateProvider(List<FamilleUniteProxy> familles) {
dataProvider.setList(familles);
dataProvider.refresh();
}
@UiFactory
public CellBrowser getCellBrowser() {
return cellBrowser;
}
}
Класс TreeViewModel:
class CustomTreeModel implements TreeViewModel {
private ListDataProvider<FamilleUniteProxy> dataProvider ;
public CustomTreeModel(ListDataProvider<FamilleUniteProxy> dataProvider) {
this.dataProvider = dataProvider;
}
public <T> NodeInfo<?> getNodeInfo(T value) {
if (value == null) {
Cell<FamilleUniteProxy> cell = new AbstractCell<FamilleUniteProxy>() {
@Override
public void render(Context context, FamilleUniteProxy value,
SafeHtmlBuilder sb) {
sb.appendEscaped(value.getIntituleFamilleUnite());
}
};
return new DefaultNodeInfo<FamilleUniteProxy>(dataProvider, cell);
} else if (value instanceof FamilleUniteProxy) {
ListDataProvider<UniteProxy> dataProvider = new ListDataProvider<UniteProxy>(
((FamilleUniteProxy) value).getUnites());
Cell<UniteProxy> cell = new AbstractCell<UniteProxy>() {
@Override
public void render(Context context, UniteProxy value,
SafeHtmlBuilder sb) {
if (value != null) {
sb.appendEscaped(value.getIntituleUnite());
}
}
};
return new DefaultNodeInfo<UniteProxy>(dataProvider, cell);
}
return null;
}
public boolean isLeaf(Object value) {
if (value instanceof UniteProxy) {
return true;
}
return false;
}
}
Надеюсь, это понятно и большое спасибо.
1 ответ
Ну, я нашел ответ. Это были ширина и высота, которые должны быть в пикселях (200 пикселей и 630 пикселей). Надеюсь, это поможет кому-то:)