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
First 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);
}
}
|
Second RssItem class
create a RssItem class for 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;
}
}
|
Third RssPage class
create a class that extends WebPage and represents the RssPage. Note that this class override
getMarkupType to return "xml" this is the way for create xml pages in wicket
this class is define in RssPage.java file
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 "";
}
}
|
Forth 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>
Five example of how i populate RssModel
...
This information is no longer relavent. The Wicket Stuff project has a complete subproject devoted to creation of RSS/Atom feeds. see: http://wicketstuff.org/confluence/display/STUFFWIKI/wicketstuff-rome