我正在使用GWT开发一个Web应用程序,我正在修改它以使用UiBinders构建。
我有几个绑定器的工作版本包含在与引用它们的类相同的包中,但是其中很多都在整个应用程序中具有通用实用程序,我希望将它们分解为uibinders包。 / p>
以下是工作代码的一些片段
TableListPanel.ui.xml文件:
<!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">
<g:HTMLPanel>
<div id="tableListPanel">
<g:HTMLPanel styleName="buttonPanel" ui:field="buttonPanel"></g:HTMLPanel>
<g:HTMLPanel styleName="tableList" ui:field="tableList"></g:HTMLPanel>
<table align="center"><tr>
<td align="center"><g:HTMLPanel styleName="tableMenu" ui:field="tableMenu"></g:HTMLPanel></td>
</tr></table>
</div>
</g:HTMLPanel>
</ui:UiBinder>
TableListPanelBinder java文件:
public class TableListPanelBinder extends Composite implements HasText {
private static AuditPanelUiBinder uiBinder = GWT
.create(AuditPanelUiBinder.class);
interface AuditPanelUiBinder extends UiBinder<Widget, TableListPanelBinder> {
}
public TableListPanelBinder() {
initWidget(uiBinder.createAndBindUi(this));
}
@UiField
protected HTMLPanel buttonPanel;
@UiField
protected HTMLPanel tableList;
@UiField
protected HTMLPanel tableMenu;
public void bindUiElement(HTMLPanel container, Widget widjetObj) {
container.add(widjetObj);
}
最后在代码中调用将小部件绑定到上面的ui:fields:
public AuditReportProfilesPanel() {
super();
this.setWidth("100%");
this.setSpacing(4);
this.parmSetsTable = createParmSetsTable();
SimplePager.Resources pagerResources = GWT.create(SimplePager.Resources.class);
pager = new SimplePager(TextLocation.CENTER, pagerResources, false, 0, true);
pager.setDisplay(parmSetsTable);
TableListPanelBinder reportListBinder = new TableListPanelBinder();
this.add(reportListBinder);
// -START- Bind UI Elements -START-
reportListBinder.bindUiElement(reportListBinder.tableList, parmSetsTable);
reportListBinder.bindUiElement(reportListBinder.tableMenu, pager);
reportListBinder.bindUiElement(reportListBinder.buttonPanel, createActionBar());
//-END- Bind UI Elements -END-
}
我知道这可能不是最简洁的方法,但我正在学习。
我知道将Binder移动到另一个包意味着私有/受保护的访问修饰符将阻止我访问代码,但将它们更改为公共对我也没有好处。
对修复的任何建议都将非常感激。这个应用程序有几个不同的类包(基本上等于应用程序中的不同页面),并且它们都使用类似的表设置,所以我想避免在每个包中都有重复的代码;我只是不是100%确定实现这一目标的最佳途径。
在Binders包中创建Abstract类,然后在各个app包中扩展它们可以解决问题,还是有些东西我不知道?
答案 0 :(得分:1)
UiBinder
和相应的类(Widget
s或View
s)写入指定的常规包中。我们称之为my.general.uibinders
package。在与具体页面(或UiBinder
)对应的Place
中,将此包导入为xmlns
标记的ui:UiBinder
属性。 UiBinder
的负责人。这样:
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
xmlns:g="urn:import:com.google.gwt.user.client.ui"
xmlns:c="urn:import:my.general.uibinders"> <!-- this is the addition -->
从现在开始,在此UiBinder
中,c
引用了my.general.uibinders
中的类。假设您有一个名为MyGeneralView
的班级,请按照<c:MyGeneralView .../>
使用它UiBinder
。