Önceki yazımızda URL den alınan bir XML in nasıl
parse edildiği üzerine konuşmuş ve bir de uygulama yapmıştık.
Şimdi yaptığımız bu uygulamadan dönen sonuçları JSF
nin en mühim componentlerinden olan <h:dataTable> ile kullanalım.
Senaryomuz şu şekilde;
XML den çektiğimiz resim linkini bir h:graphicImage tagi ile kullanıp resmi bu
sayede göstereceğiz. Ayrıca XML den aldığımız title ve link elemanlarını
da h:dataTable da yazdıracağız. Lafı fazla uzatmadan işin kodlama kısmına
geçelim.
Kodlama kısmında bize lazım olan verileri
tutabileceğimiz bir class,bir managed bean ve bir tane de xhtml sayfası.
public class SatanlarItems implements
Serializable{
private String image;
private String description;
private String title;
public SatanlarItems(String image, String
description, String title) {
this.image =
image;
this.description =
description;
this.title =
title;
}
public String getImage() {
return
image;
}
public void
setImage(String image) {
this.image =
image;
}
public String getDescription() {
return
description;
}
public void
setDescription(String description) {
this.description =
description;
}
public String getTitle() {
return title;
}
public void
setTitle(String title) {
this.title =
title;
}
}
@ManagedBean(name = "ecs")
@RequestScoped
public class EnCokSatanlarManagedBean
{
private List<SatanlarItems> arr = new ArrayList<SatanlarItems>();
private static String url
= "http://www.gold.com.tr/cok-satanlar-rss/54109/0";
public List<SatanlarItems> getArr() {
return arr;
}
public void setArr(List<SatanlarItems> arr)
{
this.arr = arr;
}
public void listele() throws
MalformedURLException, IOException, ParserConfigurationException,
SAXException {
URL
geoLocationDetailXMLURL = new URL(url);
URLConnection geoLocationDetailXMLURLConnection =
geoLocationDetailXMLURL.openConnection();
BufferedReader geoLeocationDetails = new BufferedReader(new InputStreamReader(geoLocationDetailXMLURLConnection.getInputStream(),
"UTF-8"));
InputSource inputSource = new InputSource(geoLeocationDetails);
DocumentBuilderFactory builderFactory =
DocumentBuilderFactory.newInstance();
DocumentBuilder builder = builderFactory.newDocumentBuilder();
String
expression = "rss/channel/item";
String
expressionTitle = "rss/channel/item/title";
String
expressionDesc = "rss/channel/item/link";
String
expressionImage = "rss/channel/item/image/url";
XPath
xPath = XPathFactory.newInstance().newXPath();
org.w3c.dom.Document doc = builder.parse(inputSource);
try {
NodeList nodeList = (NodeList) xPath.compile(expression).evaluate(doc, XPathConstants.NODESET);
NodeList nodeListTitle = (NodeList)
xPath.compile(expressionTitle).evaluate(doc,
XPathConstants.NODESET);
NodeList nodeListDesc = (NodeList)
xPath.compile(expressionDesc).evaluate(doc,
XPathConstants.NODESET);
NodeList nodeListImage = (NodeList)
xPath.compile(expressionImage).evaluate(doc,
XPathConstants.NODESET);
for (int i = 0;
i < nodeList.getLength(); i++) {
int k = nodeListImage.item(i).getFirstChild().getNodeValue().toString().length();
arr.add(new
SatanlarItems(nodeListImage.item(i).getFirstChild().getNodeValue().toString()
.substring(0, k-1),
nodeListDesc.item(i).getFirstChild().getNodeValue(),
nodeListTitle.item(i).getFirstChild().getNodeValue().toString()));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
index.xhtml
<h:form>
<h:commandButton value="Al" action="#{ecs.listele()}"/>
<br />
<h:dataTable value="#{ecs.arr}" var="a" border="1">
<h:column>
<f:facet name="header">ÜRÜN
FOTOĞRAFI</f:facet>
<h:graphicImage url="#{a.image}"/>
</h:column>
<h:column>
<f:facet name="header">BAŞLIK</f:facet>
#{a.title}
</h:column>
<h:column>
<f:facet name="header">AÇIKLAMA</f:facet>
<a href="#{a.description}">Detaylı
bilgi için tıklayın</a>
</h:column>
</h:dataTable>
</h:form>
Uygulamanın çıktısı aşağıda ki gibi olur.
Hiç yorum yok:
Yorum Gönder