Excerpt | ||
---|---|---|
| ||
How to create a Rss page in Wicket |
Panel | ||||
---|---|---|---|---|
| ||||
|
Howto create a Rss Page
In this document I try to explain how to create a simple Rss page to integrate in wicket applications.
Info |
---|
There is also a |
RssModel class
we define a RssModel class to store the rss information
Code Block |
---|
import java.util.ArrayList;
import java.util.List;
import wicket.util.time.Time;
public class RssModel {
private String title;
private String link;
private String description;
private String language;
private Time pubDate;
private Time lastBuildDate;
private String generator;
private String webMaster;
private List itemList=new ArrayList();
public RssModel()
{
}
public String getTitle()
{
return title;
}
public void setTitle(String title)
{
this.title=title;
}
public String getLink()
{
return link;
}
public void setLink(String link)
{
this.link=link;
}
public String getDescription()
{
return description;
}
public void setDescription(String description)
{
this.description=description;
}
public String getLanguage()
{
return language;
}
public void setLanguage(String language)
{
this.language=language;
}
public Time getPubDate()
{
return pubDate;
}
public void setPubDate(Time pubDate)
{
this.pubDate=pubDate;
}
public Time getLastBuildDate()
{
return lastBuildDate;
}
public void setLastBuildDate(Time lastBuildDate)
{
this.lastBuildDate=lastBuildDate;
}
public String getGenerator()
{
return generator;
}
public void setGenerator(String generator)
{
this.generator=generator;
}
public String getWebMaster()
{
return webMaster;
}
public void setWebMaster(String webMaster)
{
this.webMaster=webMaster;
}
public List getItems()
{
return itemList;
}
public void addItem(RssItem item)
{
itemList.add(item);
}
}
|
RssItem class
Create an RssItem class to store information of RssItems.
Code Block |
---|
import wicket.PageParameters;
import wicket.util.time.Time;
public class RssItem {
private String title;
private String link;
private String description;
private Time pubDate;
private Class pageClass;
private PageParameters parameters;
public RssItem()
{
}
public String getTitle()
{
return title;
}
public void setTitle(String title)
{
this.title=title;
}
public String getDescription()
{
return description;
}
public void setDescription(String description)
{
this.description=description;
}
public Time getPubDate()
{
return pubDate;
}
public void setPubDate(Time pubDate)
{
this.pubDate=pubDate;
}
public Class getPageClass()
{
return pageClass;
}
public void setPageClass(Class pageClass)
{
this.pageClass=pageClass;
}
public void setPageParameters(PageParameters parameters)
{
this.parameters=parameters;
}
public PageParameters getPageParameters()
{
return parameters;
}
}
|
RssPage class
Create a class that extends WebPage and represents the RssPage. Note that this class overrides
getMarkupType to return "xml", this is the way to create xml pages in wicket.
RssPage.java
Code Block |
---|
import javax.servlet.http.HttpServletRequest;
import oz.web.model.basic.RssItem;
import oz.web.model.basic.RssModel;
import oz.web.model.basic.WebApp;
import wicket.PageParameters;
import wicket.markup.html.WebPage;
import wicket.markup.html.basic.Label;
import wicket.markup.html.list.ListItem;
import wicket.markup.html.list.ListView;
import wicket.protocol.http.servlet.ServletWebRequest;
public class RssPage extends WebPage {
private Label lblTitle;
private Label lblLink;
private Label lblDescription;
private Label lblLanguage;
private Label lblPubDate;
private Label lblLastBuildDate;
private Label lblGenerator;
private Label lblWebMaster;
private ListView itemListView;
private RssModel model;
public RssPage()
{
/*
* This is a method of my application where i populate the RssModel from my
* applcations objects. You must adapt it to your needs.
*/
String siteName=getRequest().getParameter("siteName");
model=((WebApp)getApplication()).getRssModel(siteName);
add(lblTitle=new Label("lblTitle",model.getTitle()));
add(lblLink=new Label("lblLink",model.getLink()));
add(lblDescription=new Label("lblDescription",model.getDescription()));
add(lblLanguage=new Label("lblLanguage",model.getLanguage()));
add(lblPubDate=new Label("lblPubDate",
model.getPubDate().toDateString() +
"-" +
model.getPubDate().toTimeString()));
add(lblLastBuildDate=new Label(
"lblLastBuildDate",
model.getLastBuildDate().toDateString() +
"-" +
model.getLastBuildDate().toTimeString()));
add(lblGenerator=new Label("lblGenerator",model.getGenerator()));
add(lblWebMaster=new Label("lblWebMaster",model.getWebMaster()));
add(itemListView=new ListView("itemListView",model.getItems())
{
public void populateItem(ListItem item)
{
RssItem modelItem=(RssItem)item.getModelObject();
item.add(new Label("lblItemTitle",modelItem.getTitle()));
item.add(new Label(
"lblItemLink",
getFullUrl(
(String)null,
modelItem.getPageClass(),
modelItem.getPageParameters())));
item.add(new Label("lblItemDescription",modelItem.getDescription()));
item.add(new Label(
"lblItemPubDate",
modelItem.getPubDate().toDateString() +
"-" +
modelItem.getPubDate().toTimeString()));
}
});
}
public String getMarkupType()
{
return "xml";
}
private String getFullUrl(
final String pageMapName,
final Class pageClass,
final PageParameters parameters)
{
HttpServletRequest request=((ServletWebRequest)getRequest()).getHttpServletRequest();
final StringBuffer url=new StringBuffer();
url.append(getProtocolHeader(request.getProtocol()));
url.append(request.getServerName());
if(request.getServerPort()!=80)
{
url.append(":");
url.append(String.valueOf(request.getServerPort()));
}
url.append(urlFor(
pageMapName,
pageClass,
parameters));
return url.toString();
}
private String getProtocolHeader(String protocol)
{
if(protocol.equals("HTTP/1.1"))
return "http://";
else
return "";
}
}
|
RssPage.xml markup file
Define the page markup in RssPage.xml file
...
<?xml version="1.0" encoding="iso-8859-1"?>
<rss version="2.0">
<channel>
<title wicket:id="lblTitle">lblTitle</title>
<link wicket:id="lblLink">http://www.abc.es</link>
<description wicket:id="lblDescription">lblDescription</description>
<language wicket:id="lblLanguage">lblLanguage</language>
<pubDate wicket:id="lblPubDate">lblPubDate</pubDate>
<lastBuildDate wicket:id="lblLastBuildDate">lblLastBuildDate</lastBuildDate>
<generator wicket:id="lblGenerator">lblGenerator</generator>
<webMaster wicket:id="lblWebMaster">lblWebMaster</webMaster>
<item wicket:id="itemListView">
<title wicket:id="lblItemTitle">lblItemTitle</title>
<link wicket:id="lblItemLink">lblItemLink</link>
<description wicket:id="lblItemDescription">lblItemDescription</description>
<pubDate wicket:id="lblItemPubDate">lblItemPubDate</pubDate>
</item>
</channel>
</rss>
examples of how I populate RssModel.
...
This information is no longer relavent. The Wicket Stuff project has a full RSS/Atom component. See the Wicket Stuff WIKI for more information: http://wicketstuff.org/confluence/display/STUFFWIKI/Wicket+FeedPage