æ¨æ¥ä½ã£ãç°¡åãªRSSãªã¼ãã¼ã®ã½ã¼ã¹ãåããããã«ã¯Wicket 1.4-rc1ãROMEãROME FetcherãJDOMãå¿ è¦ãListViewã®ä½æé¨åã¯RSS Readerãä½ã ãã®ï¼ - ãã£ã¼ãã®åå¾ã¨è¡¨ç¤ºããã¯ã£ã¦ã¾ããã¾ãã¯HTMLããããã¡ã¤ã«åã¯HomePage.html
<html> <head> <title>Wicket Homepage</title> </head> <body> <span wicket:id="feedback"></span> <table style="width:100%; height: 100%;"> <tr> <td style="width:30%; height:100%; vertical-align:top"> <a wicket:id="javaLink">Javaã«ãã´ãª</a><br /> <a wicket:id="wicketLink">Wicketã«ãã´ãª</a><br /> </td> <!-- ListViewã®è¦ªã³ã³ãã¼ãã³ã --> <td style="width:70%; height:100%; text-align:left; vertical-align:top" wicket:id="parent"> <!-- ListViewã®é¨å --> <dl wicket:id="entryList"> <dt>â<a href="http://test.com" wicket:id="entryLink">Entry Title</a> <span wicket:id="publishDate">2009/1/27</span></dt> <dd><span wicket:id="entryDesc">Entry Description</span></dd> </dl> </td> </tr> </table> </body> </html>
次ã«å¯¾å¿ããJavaã®ã½ã¼ã¹ããã¡ã¤ã«åã¯HomePage.java
package example; import org.apache.wicket.PageParameters; import org.apache.wicket.markup.html.WebPage; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.list.ListView; import org.apache.wicket.markup.html.list.ListItem; import org.apache.wicket.markup.html.link.ExternalLink; import org.apache.wicket.ajax.markup.html.AjaxLink; import org.apache.wicket.markup.html.panel.FeedbackPanel; import org.apache.wicket.model.IModel; import org.apache.wicket.model.LoadableDetachableModel; import org.apache.wicket.ajax.AjaxRequestTarget; import com.sun.syndication.feed.synd.SyndEntry; import com.sun.syndication.feed.synd.SyndFeed; import com.sun.syndication.fetcher.FeedFetcher; import com.sun.syndication.fetcher.impl.HttpURLFeedFetcher; import com.sun.syndication.fetcher.FetcherException; import com.sun.syndication.io.FeedException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.ArrayList; import java.util.Calendar; import java.net.URL; import java.io.IOException; /** * Homepage */ public class HomePage extends WebPage { private static final long serialVersionUID = 1L; //ç¾å¨è¡¨ç¤ºãã¦ãããã£ã¼ãã®URL private String feedURL = ""; // TODO Add any page properties or variables here /** * Constructor that is invoked when page is invoked without a session. * * @param parameters * Page parameters */ public HomePage(final PageParameters parameters) { // TODO Add your page's components here //ã¨ã©ã¼ã¡ãã»ã¼ã¸ã表示ããFeedbackPanel final FeedbackPanel feedback = new FeedbackPanel("feedback"); //Ajaxã§æ´æ°å¯è½ã«ãã feedback.setOutputMarkupId(true); //ãã£ã¼ãã«å«ã¾ããã¨ã³ããªã®ä¸è¦§ã表示ããListView ListView listView = createListView(); //ListViewã®è¦ªã³ã³ãã¼ãã³ã(Ajaxã§ListViewãæ´æ°ããã®ã«å¿ è¦) final WebMarkupContainer parent = new WebMarkupContainer("parent"); //Ajaxã§æ´æ°å¯è½ã«ãã parent.setOutputMarkupId(true); //ãã¼ã¯ã¼ãJavaã®ãã£ã¼ããåå¾ãã¦ããAjaxLink AjaxLink javaLink = new AjaxLink("javaLink"){ public void onClick(AjaxRequestTarget target){ //ãã£ã¼ãã®URLãæ¸ãæãã feedURL = "http://k.hatena.ne.jp/keywordblog/Java?mode=rss"; //ListViewãæ´æ° target.addComponent(parent); //FeedbackPanelãæ´æ° target.addComponent(feedback); } }; //ãã¼ã¯ã¼ãWicketã®ãã£ã¼ããåå¾ãã¦ããAjaxLink AjaxLink wicketLink = new AjaxLink("wicketLink"){ public void onClick(AjaxRequestTarget target){ //ãã£ã¼ãã®URLãæ¸ãæãã feedURL = "http://k.hatena.ne.jp/keywordblog/Wicket?mode=rss"; //ListViewãæ´æ°ãã target.addComponent(parent); //FeedbackPanelãæ´æ°ãã target.addComponent(feedback); } }; add(feedback); add(wicketLink); add(javaLink); parent.add(listView); add(parent); } //ãã£ã¼ãã®ã¨ã³ããªä¸è¦§ã表示ããListViewãä½æãã private ListView createListView(){ IModel<List<SyndEntry>> entryListModel = new LoadableDetachableModel<List<SyndEntry>>(){ protected List<SyndEntry> load(){ //ã¨ã³ããªã®ä¸è¦§ãè¿ã return getEntryList(); } }; ListView listView = new ListView( "entryList", entryListModel) { @Override protected void populateItem(ListItem item) { final SyndEntry entry = (SyndEntry)item.getModelObject(); item.add(new ExternalLink("entryLink", entry.getLink(), entry.getTitle())); Date updateDate = entry.getUpdatedDate(); if(updateDate == null) updateDate = entry.getPublishedDate(); //æéãæ¥æ¬æéã«åããã SimpleDateFormat format = new SimpleDateFormat( "yyyy-MM-dd HH:mm"); Calendar calendar = Calendar.getInstance(); calendar.setTime(updateDate); calendar.add(Calendar.HOUR_OF_DAY, 9); updateDate = calendar.getTime(); item.add( new Label("publishDate", format.format( updateDate))); String description = entry.getDescription().getValue(); //ãã£ã¹ã¯ãªãã·ã§ã³ã«å«ã¾ããã¿ã°ãåãé¤ã description = description.replaceAll("<[^>]+>", ""); item.add(new Label("entryDesc", description)); } }; return listView; } private List<SyndEntry> getEntryList(){ if(feedURL.trim().length() == 0){ //ãã£ã¼ãã®URLã空æååãªã空ã®ãªã¹ããè¿ã return new ArrayList<SyndEntry>(); } try{ //ãã£ã¼ãã®URLãããã£ã¼ãã®ã¨ã³ããªä¸è¦§ãåå¾ãè¿ã FeedFetcher fetcher = new HttpURLFeedFetcher(); SyndFeed feed = fetcher.retrieveFeed(new URL(feedURL)); return feed.getEntries(); }catch(FetcherException e){ error("ãã£ã¼ãã®åå¾ã«å¤±æãã¾ãã: " + e.getMessage()); }catch(IOException e){ error("ãã£ã¼ãã®åå¾ã«å¤±æãã¾ãã: " + e.getMessage()); }catch(FeedException e){ error("ãã£ã¼ãã®åå¾ã«å¤±æãã¾ãã: " + e.getMessage()); } return new ArrayList<SyndEntry>(); } }
ã¢ããªã±ã¼ã·ã§ã³ã¯ã©ã¹ã¨ãã£ã«ã¿ã¼ãããã³ã°ã¯çç¥