按照上一节的思路,我们来继续重构feed和item区域
- 新建两个恒量,在RSSReaderConstants类里,加入两个新的恒量——FEED_PORTLET 和 ITEM_PORTLET
public static final String FEED_PORTLET = "feedPortlet";
public static final String ITEM_PORTLET = "itemPortlet";
- 在包com.danielvaughan.rssreader.client.portlets:新建FeedPortlet extends Portlet;并且在构造函数中用相同于NavPortlet的代码。
package com.danielvaughan.rssreader.client.portlets;
import com.danielvaughan.rssreader.client.RSSReaderConstants;
import com.extjs.gxt.ui.client.widget.custom.Portlet;
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
public class FeedPortlet extends Portlet {
public FeedPortlet() {
setHeading("Feed");
setLayout(new FitLayout());
setHeight(350);
setId(RSSReaderConstants.FEED_PORTLET);
}
}
- 同样的,在FeedPortlet类里,新建FeedPanel属性,在其构造函数里,设置头部可见性,并将FeedPanel加入到FeedPortlet里;最后,派发NewPortletCreated事件
package com.danielvaughan.rssreader.client.portlets;
import com.danielvaughan.rssreader.client.RSSReaderConstants;
import com.danielvaughan.rssreader.client.components.FeedPanel;
import com.danielvaughan.rssreader.client.mvc.events.AppEvents;
import com.extjs.gxt.ui.client.mvc.Dispatcher;
import com.extjs.gxt.ui.client.widget.custom.Portlet;
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
public class FeedPortlet extends Portlet {
private final FeedPanel feedPanel = new FeedPanel();
public FeedPortlet() {
setHeading("Feed");
setLayout(new FitLayout());
setHeight(350);
setId(RSSReaderConstants.FEED_PORTLET);
feedPanel.setHeaderVisible(false);
add(feedPanel);
Dispatcher.forwardEvent(AppEvents.NewPortletCreated, this);
}
}
- 在包com.danielvaughan.rssreader.client.portlets:新建ItemPortlet extends Portlet;并且在构造函数中用相同于NavPortlet的代码。
package com.danielvaughan.rssreader.client.portlets;
import com.danielvaughan.rssreader.client.RSSReaderConstants;
import com.danielvaughan.rssreader.client.components.ItemPanel;
import com.danielvaughan.rssreader.client.mvc.events.AppEvents;
import com.extjs.gxt.ui.client.mvc.Dispatcher;
import com.extjs.gxt.ui.client.widget.custom.Portlet;
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
public class ItemPortlet extends Portlet {
public ItemPortlet() {
setHeading("Item");
setLayout(new FitLayout());
setHeight(250);
setId(RSSReaderConstants.ITEM_PORTLET);
final ItemPanel itemPanel = new ItemPanel();
itemPanel.setHeaderVisible(false);
add(itemPanel);
Dispatcher.forwardEvent(AppEvents.NewPortletCreated, this);
}
}
- 新建FeedPortlet和ItemPortlet好之后,我们在RSSReader.onModuleLoad()方法里面新建各自的实例
package com.danielvaughan.rssreader.client;
import com.danielvaughan.rssreader.client.mvc.controllers.PortalController;
import com.danielvaughan.rssreader.client.portlets.FeedPortlet;
import com.danielvaughan.rssreader.client.portlets.ItemPortlet;
import com.danielvaughan.rssreader.client.portlets.NavPortlet;
import com.danielvaughan.rssreader.client.services.FeedService;
import com.danielvaughan.rssreader.client.services.FeedServiceAsync;
import com.extjs.gxt.ui.client.Registry;
import com.extjs.gxt.ui.client.mvc.Dispatcher;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
/**
* Entry point classes define <code>onModuleLoad()</code>.
*/
public class RSSReader implements EntryPoint {
/**
* This is the entry point method.
*/
@Override
public void onModuleLoad() {
final FeedServiceAsync feedService = GWT.create(FeedService.class);
Registry.register(RSSReaderConstants.FEED_SERVICE, feedService);
Dispatcher dispatcher = Dispatcher.get();
dispatcher.addController(new PortalController());
new NavPortlet();
new FeedPortlet();
new ItemPortlet();
}
}
- 最后,运行效果如下