20 Ekim 2013 Pazar

JSF de XML içeriğini h:dataTable ile gösterme

Ö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