GWTP&x2B;Gxt:在页面的两个单独插槽中使用相同的presenter小部件时出现异常
我有一个带有边框布局的页面,并为边框布局的每个区域定义了插槽(例如,东、西、北、中……) 我希望通过在页面上面的两个插槽中显示presenter小部件来重用它。 我成功地在其中一个插槽上显示了presenter小部件,但每当我尝试在两个单独的插槽中添加presenter小部件时,就会出现以下错误:GWTP&x2B;Gxt:在页面的两个单独插槽中使用相同的presenter小部件时出现异常,gwt,gxt,gwt-platform,Gwt,Gxt,Gwt Platform,我有一个带有边框布局的页面,并为边框布局的每个区域定义了插槽(例如,东、西、北、中……) 我希望通过在页面上面的两个插槽中显示presenter小部件来重用它。 我成功地在其中一个插槽上显示了presenter小部件,但每当我尝试在两个单独的插槽中添加presenter小部件时,就会出现以下错误: 捕获异常:对可见演示者调用notifyReveal() 谁能告诉我怎么做吗 下面是我的代码 HomeView.java @UiField ContentPanel centerPanel; @UiF
捕获异常:对可见演示者调用notifyReveal()代码>
谁能告诉我怎么做吗
下面是我的代码
HomeView.java
@UiField
ContentPanel centerPanel;
@UiField
ContentPanel westPanel;
@Override
public void setInSlot(Object slot, Widget content) {
if (slot == HomePresenter.SLOT_EAST) {
if (content != null) {
eastPanel.add(content);
}
} else if (slot == HomePresenter.SLOT_WEST) {
if (content != null) {
westPanel.add(content);
}
} else if (slot == HomePresenter.SLOT_CENTER) {
if (content != null) {
centerPanel.add(content);
}
} else {
super.setInSlot(slot, content);
}
}
@Override
public void addToSlot(Object slot, Widget content) {
if (slot == HomePresenter.SLOT_EAST) {
if (content != null) {
eastPanel.add(content);
}
} else if (slot == HomePresenter.SLOT_WEST) {
if (content != null) {
westPanel.add(content);
}
} else if (slot == HomePresenter.SLOT_CENTER) {
if (content != null) {
centerPanel.add(content);
}
} else {
super.addToSlot(slot, content);
}
}
HomePresenter.java:
public static final Object SLOT_WEST = new Object();
public static final Object SLOT_CENTER = new Object();
@Override
protected void revealInParent() {
RevealRootContentEvent.fire(this, this); //Getting error over here
}
@Override
protected void onReset() {
super.onReset();
setInSlot(SLOT_WEST, null);
setInSlot(SLOT_CENTER, null);
indirectProvider.get(new AsyncCallback<LeftPanelPresenter>() {
@Override
public void onSuccess(LeftPanelPresenter result) {
addToSlot(SLOT_WEST, result);
addToSlot(SLOT_CENTER, result);
}
@Override
public void onFailure(Throwable caught) {
// TODO Auto-generated method stub
System.out.println("Not added to the slot");
}
});
}
publicstaticfinalobjectslot_WEST=newobject();
公共静态最终对象槽_中心=新对象();
@凌驾
受保护的无效父对象(){
RevealRootContentEvent.fire(this,this);//在此处获取错误
}
@凌驾
受保护的void onReset(){
super.onReset();
setInSlot(槽西,空);
setInSlot(插槽_中心,空);
获取(新的AsyncCallback(){
@凌驾
成功时公共无效(LeftPanelPresenter结果){
addToSlot(西槽,结果);
addToSlot(插槽_中心,结果);
}
@凌驾
失败时的公共无效(可丢弃){
//TODO自动生成的方法存根
System.out.println(“未添加到插槽”);
}
});
}
提供者的要点是为每个要放置它的位置创建一个新实例
我认为使用相同的result
对象调用addToSlot()
两次会导致错误,因为该实例已经被显示
可以使用循环为每个插槽创建新实例:
// create an array of the slots
List<Object> slots = new ArrayList<Object>();
slots.add(SLOT_WEST);
slots.add(SLOT_CENTER);
// call provider.get() on each slot in turn
for(Object slot : slots)
{
indirectProvider.get(new AsyncCallback<LeftPanelPresenter>()
{
@Override
public void onSuccess(LeftPanelPresenter result)
{
addToSlot(slot, result);
}
@Override
public void onFailure(Throwable caught)
{
// TODO Auto-generated method stub
System.out.println("Not added to the slot");
}
});
}
//创建插槽数组
列表插槽=新的ArrayList();
插槽。添加(插槽西侧);
插槽。添加(插槽\u中心);
//依次在每个插槽上调用provider.get()
用于(对象插槽:插槽)
{
获取(新的AsyncCallback()
{
@凌驾
成功时公共无效(LeftPanelPresenter结果)
{
addToSlot(插槽、结果);
}
@凌驾
失败时的公共无效(可丢弃)
{
//TODO自动生成的方法存根
System.out.println(“未添加到插槽”);
}
});
}