18 Ekim 2013 Cuma

JAVA DA XML PARSE ETME (XPATH)

Java da XML parse etmenin birkaç metodu olmakla beraber bunların bazıları;
            -DOM  Parser
            -SAX Parser
            -JAXP
XPath bir W3C standardı olup XML dokümanının içinde ki bilgileri elde etmek için kullanılır. Küçük bir programlama dili gibi metodları, testleri ve ifadeleri vardır.
Bir XML dosyasını URL den veya dosyadan okuyabiliriz. Okuma mantığı her zaman aynıdır. Aşağıda yazdığım kodlar URL den çekilen bir XML dosyasının parse edilişidir. XPath ile alâkalı detaylı bilgiye buradan ulaşabilirsiniz. Biz lafı fazla uzatmadan kodlama kısmına geçelim.
Senaryomuz şu şekilde;
Elimiz de XML formatında bir URL var ve biz bu URL den bize lazım olan resim linklerini alacağız.

public class XPathParser {
    private static String url = "http://www.gold.com.tr/cok-satanlar-rss/54109/0";
    private static ArrayList<String> arr = new ArrayList<>();
    public static void main(String[] args) throws ParserConfigurationException, MalformedURLException, IOException, SAXException, XPathExpressionException {
        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();
        org.w3c.dom.Document xmlDocument = builder.parse(inputSource);
        XPath xPath =  XPathFactory.newInstance().newXPath();
        String expression = "rss/channel/item/image/url";   
    NodeList nodeList = (NodeList) xPath.compile(expression).evaluate(xmlDocument, XPathConstants.NODESET);      
        for (int i = 0; i < nodeList.getLength(); i++) {
            arr.add(nodeList.item(i).getFirstChild().getNodeValue().toString());
        }
       
        for (int i = 0; i < arr.size(); i++) {
            System.out.println(arr.get(i));
        }
    }
}
Çıktı aşağıda ki gibi olacaktır.

http://cdn.gold.com.tr/UrunResim/BuyukResim/22500118260518.jpg
http://cdn.gold.com.tr/UrunResim/BuyukResim/23289917929781.jpg
http://cdn.gold.com.tr/UrunResim/BuyukResim/23681317937327.jpg
http://cdn.gold.com.tr/UrunResim/BuyukResim/23681117934373.jpg
http://cdn.gold.com.tr/UrunResim/BuyukResim/24087418137445.jpg
http://cdn.gold.com.tr/UrunResim/BuyukResim/24252218265797.jpg
http://cdn.gold.com.tr/UrunResim/BuyukResim/21674611123910.jpg
http://cdn.gold.com.tr/UrunResim/BuyukResim/23680917931225.jpg

25 Eylül 2013 Çarşamba

JSF de h:dataTable kullanımı

JSF de kayıtları listelemek için kullandığımız bir dataTable nesnesi vardır. Genellikle bir parametreyi alır ve listeler.
Tabi bu listeleme işini yaparken neyi listelediğimize dikkat etmeliyiz.
Aşağıda bu kullanımı anlatan bir uygulama bulunmaktadır. Burada yapılan bir formda ki inputText lere girilen değerlerin bir ArrayList dee tutulup ,kaydet butonuna basar basmaz kaydettiğimiz tüm değerler liste halinde bize getirilmesidir.

Personel.java

package com.mesutemre;

import java.math.BigDecimal;
public class Personel {
    String numarasi;
    String adiSoyadi;
    BigDecimal maasi;
    int yasi;
    public Personel(String numarasi, String adiSoyadi, BigDecimal maasi, int yasi) {
        this.numarasi = numarasi;
        this.adiSoyadi = adiSoyadi;
        this.maasi = maasi;
        this.yasi = yasi;
    }

    public String getNumarasi() {
        return numarasi;
    }

    public void setNumarasi(String numarasi) {
        this.numarasi = numarasi;
    }

    public String getAdiSoyadi() {
        return adiSoyadi;
    }

    public void setAdiSoyadi(String adiSoyadi) {
        this.adiSoyadi = adiSoyadi;
    }

    public BigDecimal getMaasi() {
        return maasi;
    }

    public void setMaasi(BigDecimal maasi) {
        this.maasi = maasi;
    }

    public int getYasi() {
        return yasi;
    }

    public void setYasi(int yasi) {
        this.yasi = yasi;
    }
}

YonetimliBean.java

package com.mesutemre;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
@ManagedBean(name = "yb")
@RequestScoped
public class YonetimliBean implements Serializable {
    String adisoyadi, numarasi;
    BigDecimal maasi;
    int yasi;
    private static List<Personel> personelListesi = new ArrayList<Personel>();
   
    public String getAdisoyadi() {
        return adisoyadi;
    }

    public void setAdisoyadi(String adisoyadi) {
        this.adisoyadi = adisoyadi;
    }

    public String getNumarasi() {
        return numarasi;
    }

    public void setNumarasi(String numarasi) {
        this.numarasi = numarasi;
    }

    public BigDecimal getMaasi() {
        return maasi;
    }

    public void setMaasi(BigDecimal maasi) {
        this.maasi = maasi;
    }

    public int getYasi() {
        return yasi;
    }


    public void setYasi(int yasi) {
        this.yasi = yasi;
    }
   

    public List<Personel> getPersonelListesi() {
        return personelListesi;
    }

    public void setPersonelListesi(ArrayList<Personel> personelListesi) {
        this.personelListesi = personelListesi;
    }

    public String kayitEkle() {
        Personel personel = new Personel(this.adisoyadi, this.numarasi, this.maasi, this.yasi);
        personelListesi.add(personel);
       
        this.adisoyadi = "";
        this.numarasi = "";
        this.yasi = 0;
        this.maasi = null;
       
        return "";
    }
}

index.xhtml

<h:body>
        <h:outputStylesheet library="css" name="table-style.css" />
        <h:form>
            <h:panelGrid columns="2" border="0">
                <h:outputLabel value="NUMARASI:" />
                <h:inputText value="#{yb.numarasi}" />
                <h:outputLabel value="ADI SOYADI:" />
                <h:inputText value="#{yb.adisoyadi}" />
                <h:outputLabel value="YAŞI:" />
                <h:inputText value="#{yb.yasi}" />
                <h:outputLabel value="MAAŞI:" />
                <h:inputText value="#{yb.maasi}" />
                <h:outputLabel value="" />
                <h:commandButton value="Ekle" action="#{yb.kayitEkle()}" />
            </h:panelGrid>

            <hr />

            <h:dataTable value="#{yb.personelListesi}" var="p"
                         styleClass="personel-tablo" headerClass="personel-tablo-baslik"
                         rowClasses="personel-tablo-tek-satir,personel-tablo-cift-satir">
                <h:column>
                    <f:facet name="header">NUMARASI</f:facet>
                        #{p.numarasi}
                </h:column>

                <h:column>
                    <f:facet name="header">ADI SOYADI</f:facet>
                        #{p.adisoyadi}
                </h:column>

                <h:column>
                    <f:facet name="header">YAŞI</f:facet>
                        #{p.yasi}
                </h:column>

                <h:column>
                    <f:facet name="header">MAAŞI</f:facet>
                        #{p.maasi}
                </h:column>
            </h:dataTable>
        </h:form>
    </h:body>

Uygulamanın ekran çıktısı aşağıda ki gibi olur.


10 Eylül 2013 Salı

JSF de h:selectOneMenu ve h:selectManyListbox Bileşenlerinin Kullanımı

Bu iki component JSF uygulamalarında sıkça kullanılan componentler olmakla  beraber ManagedBean tarafında da işlenmesi oldukça önemlidir.
<h:selectOneMenu> componenti tıpkı combobox gibidir. <h:selectManyListbox> componenti ise tıpkı Java swing de ki list componenti gibidir.
Aşağıda bu bileşenlerin JSF sayfalarında nasıl kullanıldığı ve ManagedBean ler ile nasıl işlendiğini anlatan bir uygulama mevcuttur.

<h:outputText value="Meslek : " />
                    <h:selectOneMenu value="#{comyon.meslek}">
                        <f:selectItem itemValue="Öğrenci" itemLabel="Öğrenci" />
                        <f:selectItem itemValue="Mühendis" itemLabel="Mühendis" />
                        <f:selectItem itemValue="Doktor" itemLabel="Doktor" />
                        <f:selectItem itemValue="Avukat" itemLabel="Avukat" />
                        <f:selectItem itemValue="Asker" itemLabel="Asker" />
                    </h:selectOneMenu>

                    <h:outputText value="İlgi alanlarınız : " />
                    <h:selectManyListbox value="#{comyon.ilgiAlanlari}">
                        <f:selectItem itemValue="Yazılım" itemLabel="Yazılım"/>
                        <f:selectItem itemValue="Spor" itemLabel="Spor"/>
                        <f:selectItem itemValue="Kitaplar" itemLabel="Kitaplar"/>
                        <f:selectItem itemValue="TV" itemLabel="TV"/>
                        <f:selectItem itemValue="Tarih" itemLabel="Tarih"/>
                        <f:selectItem itemValue="Sosyoloji" itemLabel="Sosyoloji"/>
                        <f:selectItem itemValue="Matematik" itemLabel="Matematik"/>
                    </h:selectManyListbox>
Bu iki bileşen yukarıda görüldüğü gibi kullanılır. Ortaya aşağıda ki gibi bir görüntü çıkar.

Başka bir sayfaya buradan seçtiğimiz değerleri göndermek için ya da seçilen bu değerleri kontrol edebilmek için ManagedBean imiz aşağıda ki gibi olur.
package com.mesutemre;

import java.util.Date;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

@ManagedBean(name = "comyon")
@RequestScoped
public class ComponentYonetim {
    private String meslek;
    private String[] ilgiAlanlari;
    public String getMeslek() {
        return meslek;
    }

    public void setMeslek(String meslek) {
        this.meslek = meslek;
    }

    public String[] getIlgiAlanlari() {
        return ilgiAlanlari;
    }

    public void setIlgiAlanlari(String[] ilgiAlanlari) {
        this.ilgiAlanlari = ilgiAlanlari;
    }

    public String getılgiAlaniInString() {
        String s = "";
        StringBuilder builder = new StringBuilder();
        if (ilgiAlanlari == null) {
            s += "";
        } else {
            for (int i = 0; i < ilgiAlanlari.length; i++) {
                if (i != 0) {
                    builder.append(",");
                }
                builder.append(ilgiAlanlari[i]);
            }

            s += builder.toString();
        }
        return s;
    }
}

Listbox dan veri alınırken dönen değerin bir String dizisi olduğuna dikkat ediniz. Dolayısıyla xhtml sayfasında ListBox dan dönen değeri yazdırırken getılgiAlaniInString metodunu kullanacağız
Bir başka makale de görüşmek üzere esen kalın…