Perşembe, Ağustos 20, 2009

quikmaps.com

google maps veya google earth ile çeşitli haritaları inceleyebilir ve ekran görüntüsünü alabilirsiniz. hatta adresi de alabilirsiniz. ama seçiğiniz harita üzerinde not bırakmak veya tarif etmek veya bir yolu çizmek isterseniz ne yapacaksınız? işte bunun için quikmaps kullanabilirsiniz. zühtü nün blogunda keşfettim bunu.
http://www.quikmaps.com/new

Çarşamba, Ağustos 05, 2009

jsf richfaces performance tuning

Jsf ve richfaces ile uygulama geliştirdiyseniz yavaşlık ile ilgili şikayetiniz olabilir. Bu teknolojiler dikkatli kullanılmadığında yavaşlık yaşayabilirsiniz. Aşağıda performans için yapılması gereken bir kaç şey eklenmiş.

Richfaces Filter
<filter>
<display-name>RichFacesFilter</display-name>
<filter-name>richfaces</filter-name>
<filter-class>org.ajax4jsf.Filter</filter-class>
<init-param>
<param-name>forceparser</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>enable-cache</param-name>
<param-value>true</param-value>
</init-param>
</filter>

enable-cache parametresi ile richfaces komponentlerini client tarafında cachelenmesini sağlar. bu sayede gözle görülür bir performans sağlanabilir. forceparser parametres ile de richfaces a sadece ajax geri dönüşleri düzenlemesini söylüyoruz. eğer bu parametreyi bu şekilde set etmezsek html dahil bütün geri dönüşleri düzenlemeye kalkar.

<context-param>
<param-name>org.ajax4jsf.COMPRESS_SCRIPT</param-name>
<param-value>true</param-value>
</context-param>

compress_script parametresi ile konteynır'a bütün richfaces kaynaklarını sıkıştırmasını söylüyoruz.

<!-- load all richfaces javascript onetime -->
<context-param>
<param-name>org.richfaces.LoadScriptStrategy</param-name>
<param-value>ALL</param-value>
</context-param>
<context-param>
<param-name>org.ajax4jsf.COMPRESS_SCRIPT</param-name>
<param-value>true</param-value>
</context-param>
<!-- load all richfaces css onetime -->
<context-param>
<param-name>org.richfaces.LoadStyleStrategy</param-name>
<param-value>ALL</param-value>
</context-param>


org.richfaces.LoadScriptStrategy parametresini ALL yapmakla bütün scriptleri ilk başta yüklemesini sağayabiliriz. böylelikle daha ilkin yavaşa yüklense de sonrasında uygulama hızlı bir şekilde çalışarak network trafğini azaltacaktır. aynı şekilde org.richfaces.LoadStyleStrategy parametresini ALL yaparak css lerinde ilk başta yüklemesini sağlayabiliriz.


Bunların dışında ajax kullanırken aşağıdaki durumlara dikkat etmekte fayda var;

-> herhangi bir partial rendering yaparken mutlaka ajaxSingle=true yu kullanmaya özen göstermek,

-> validasyonun gerekli olmadığı rendering durumlarında immediate=true yaparak hızlı bir şekilde cevap dönmesini sağlamak.

-> ajax response sonucunda sadece reRender="" litesini set edeceksek limitToList=true seçeneğini set ederek sadece ilgili alanların set edilmesini sağlamak.

-> ajax regionları kullanarak sadece ilgili region ın update edilmesini sağlamak. ajax region kullanırken renderRegionOnly yi true yaparsak sadece ilgili region update edilir.

-> jsf tagları ile halledilebilen bir işi richfaces tagı ile kullanmamak. örenğin h:datatable ile halledilebilecek bir iş için rich:datatable kullanmamak gerekiyor.

-> business logic kısmını getter lara koymamak.

Cuma, Temmuz 31, 2009

HttpSessionListener ve ServletContextListener

ServletContextListener ve HttpSessionListener bir web projesinde sıkça kullanılması gerekenlerdendir. bir web projesinde session create edilirken ve destroy olurken yapılması gereken işler mutlaka olur. Bunun için HttpSessionListener nesnesini kullanırız.

Aynı şekilde projeyi ilk olarak servera deploy edip başlatırken uygulamanın çalışması boyunca kullanılacak parametreleri yüklemek isteyebiliriz. veya uygulamayı kapatırken yapmamız gereken işler olabilir. Bu durumda contextlistenera ihtiyacımı olacaktır. Bunun için de ServletContextListener ı kullanabiliriz.

Aşağıda ikisini bir arada kullanan bir örnek bulunmaktadır.
public class MySessionListener implements HttpSessionListener, ServletContextListener {
public MySessionListener() {
}

public void sessionCreated(HttpSessionEvent event) {
/*session ilk oluşturulduğunda yapacağınız işleri burada yapabilirsiniz
örneğin aşağıda kullanıcı session objemizi oluşturup sessiona atıyoruz
*/
SessionUserBean sub =new SessionUserBean();
event.getSession().setAttribute("sessionUserBean", sub);
}

public void sessionDestroyed(HttpSessionEvent event) {
// session destroy olurken yapılmak istenen işler...
}

public void contextInitialized(ServletContextEvent event) {
//uygulama deploy edilirken yapılamsı gereken işler...
ApplicationBean appbean = new ApplicationBean();
event.getServletContext().setAttribute("applicationBean",appbean);

}


public void contextDestroyed(ServletContextEvent event) {
//uygulama kapatılırken yapılması gereken işler...
}
}


web.xml deki tanımı ise şöyle yapılabilir.
<!-- Session listeners -->
<listener>
<listener-class>org.yourapp.listener.MySessionListener</listener-class>
</listener>

Çarşamba, Temmuz 29, 2009

Eclipse Cache temizleme

Eğer eclipse'e yeni plugin eklediyseniz veya eclipse iniz garip davranmaya başladıysa cache ini temizlemek gerekebilir. Bunun için;
eclipse'i clean parametresi ile komut satırından açmanız yeterli olacaktır.

eclipse.exe -clean

demeniz yeterli olacaktır.

Perşembe, Şubat 12, 2009

Ajax a4j:region

A4j:region ile sayfanızın hangi parçalarının ajax işlemi sırasında servera gideceğini belirlersiniz. Yani bir ajax request sırasında gerekli gereksiz sayfa nın tamamının servera gidip gelmesini ve bu şekilde trafik oluşmasını önlemiş oluruz. zaten ajax işlemlerinin hızlı gerçekleşmesi gerekiyor. eğer a4j:region gibi componentleri kullanıp sayfanın sadece ilgili kısmını göndermezsek sayfalar çok yavaş yüklenir ve networkte trafik oluşturur. Eğer region(servera gönderilecek alan) belirlenmezse f:view taglari arasındaki alanlar default region kabul edilir.
<f:view>
....
<a4j:region>
jsf komponentleri
</a4j:region>
....
</f:view>

Ajax a4j:outputPanel

a4j:outputPanel kendi içindeki componentlerin ajax responsunda render edilmesini sağlar. ayrıca outputpanel kendi içindeki componentlerin ajax işlemi sonunda rerender etme işleminde de kullanılır. ajaxRendered="true" kullandığınızda ajaxın rerender metoduna herhangi bir şey yazmanıza bile gerek kalmaz. şöyle ki;
<a4j:outputPanel 
ajaxRendered="true">
<h:panelGrid id="toppanelgrid" columns="2" width="750"
columnClasses="colStyle1,colStyle2">
<h:column>
<h:outputText value="Select One:"></h:outputText>
</h:column>
<h:column>
<h:selectOneMenu value="#{bean.selecteditem}"
required="true">
<f:selectItem itemLabel="Please Select" itemValue="" />
<f:selectItem itemLabel="item1" itemValue="item1" />
<f:selectItem itemLabel="item2" itemValue="item2" />
<a4j:support event="onchange" ajaxSingle="true"
actionListener="#{bean.itemrenderer}"></a4j:support>
</h:selectOneMenu>
</h:column>

<h:column rendered="#{bean.item1renderer}">
<h:outputText value="item1"></h:outputText>
</h:column>
<h:column rendered="#{bean.item1renderer}">
<h:inputText value="#{bean.item1text}"></h:inputText>
</h:column>

<h:column rendered="#{bean.item2renderer}">
<h:outputText value="item2"></h:outputText>
</h:column>
<h:column rendered="#{bean.item2renderer}">
<h:inputText value="#{bean.item2text}"></h:inputText>
</h:column>
</h:panelGrid>
</a4j:outputPanel>

Fakat önemli bir noktayı gözardı etmemek lazım. formunuzda ajaxRendered="true" olan birden fazla outputpanel iniz varsa bunların çalışması birbirini etkileyebilir. bu durumlarda rerender metodunu kullanmak gerekecektir.

Pazartesi, Aralık 22, 2008

CETURK Java Teknolojileri Ankara Etkinliği (3 Ocak 2009 Cumartesi)



Bugüne kadar gerçekleştirdiği bir çok etkinlikle üyelerine ve bilişim sektörünün gelişmesine katkıda bulunan CETURK başkentimiz Ankara'da yapacağı büyük bir organizasyon ile karşımızda.

CETURK , 3 Ocak Cumartesi günü Çankaya Üniversitesi Mavi Salon'da "CETURK Java Teknolojileri Ankara Etkinliği" inde Java dünyasını bir araya getiriyor. Java dünyasındaki en son teknolojilerin ve gelişmelerin anlatılacağı etkinlikte Java dünyasının önemli isimleri , Kenan Sevindik, Melih Sakarya, Özcan Acar ve Ümit Vardar sunum yapacaklar.

Melih Sakarya JBoss Seam
Ümit Vardar JPA ve Hibernate
Kenan Sevindik Spring Framework'e Giriş
Özcan Acar Apache Wicket Framework
PANEL Java Dünyası ve Türkiye

Ayrıntılı bilgi ve kayıt için tıklayınız.

XML Processing in kolay yolu -- JAXB Tutorial

Xml dosyaları ile uğraşıyorsanız, web servislerlerle işiniz çoksa bilmeniz gereken en önemli java paketi jwsdp dir. jwsdp (java web service developer pack) j2ee mimarisinde çok önemli bir yere sahiptir. bu yazımızda JWSDP nin içinde bulunan JAXB üzerinde duralım. Kısaca JAXB java developerlara xml ve xml processing işlerini detaylı olarak bilmeden xml ile kolayca çalışmasını sağlar. XML-Databinding ile xml e karşılık gelen java objeleri oluşturularak onlar üzerinde çalışılır. Böylelikle SAX, JDOM, ve DOM bilmenize gerek kalmadan xml ile işlerinizi yaparsınız. Bu sizinle xml dosyası arasına bir katman koyar. Bu katmanın xml üzerinde detaylı çalışmak isteyenler için tabiiki kısıtlayıcı özelliği var ama xml yapıları pek değişmeyen durumlar için JAXB kullanmak çok avantajlı. çünkü sizi hamallıktan kurtarır.

Bu tutorial içinde JAXB kurulumu, marshalling ve unmarshalling konuları yer alır.

JAXB SETUP
Öncelikle Java Web Services Developer Pack 2.0 ı indirmeniz gerekir. setupını çalıştırıp bitirdikten sonra C:\Sun\jwsdp*** gibi bir dizin oluşacaktır.(Tabi JDK5.0 ve üstünü kurmuş olduğunuzu varsayıyorum). Bundan sonra sistem PATH ine C:\Sun\jwsdp-2.0\jaxb\bin eklemeniz gerekir. yani JAXB nin bin klasörünü. Ayrıca JAXB_HOME değişkenini de sisteme eklemeniz gerekir. Bundan sonra komut satırına girip xjc yazdığınızda eğer tanınıyorsa kurulumunuz bitmiş demektir.


UNMARSHALLING (XML to Java Object)
şöyle bir xml dosyamız olsun;

<?xml version="1.0"?>
<purchaseOrder orderDate="1999-10-20">
<shipTo country="US">
<name>Alice Smith</name>
<street>123 Maple Street</street>
<city>Cambridge</city>
<state>MA</state>
<zip>12345</zip>
</shipTo>
<billTo country="US">
<name>Robert Smith</name>
<street>8 Oak Avenue</street>
<city>Cambridge</city>
<state>MA</state>
<zip>12345</zip>
</billTo>
<items>
<item partNum="242-NO">
<productName>Nosferatu - Special Edition (1929)</productName>
<quantity>5</quantity>
<USPrice>19.99</USPrice>
</item>
<item partNum="242-MU">
<productName>The Mummy (1959)</productName>
<quantity>3</quantity>
<USPrice>19.98</USPrice>
</item>
<item partNum="242-GZ">
<productName>Godzilla and Mothra: Battle for Earth/Godzilla
vs. King Ghidora</productName>
<quantity>3</quantity>
<USPrice>27.95</USPrice>
</item>
</items>
</purchaseOrder>




bu xml dosyamızı xsd ye çevirmemiz gerekiyor. xsd detayları ile uğraşmak istemiyorsanız herhangi bir xml xsd convertor ile bu işi halledebilirsiniz. bu tutorial da XMLFox kullandım.

command promptan xsd dosyanızın olduğu dizine gelin;

xjc -p org.karatas.test.po po.xsd

komutunu yazdıktan sonra size verdiğiniz path te classlarınızı oluşturur. üretilen klassları projenizde src klasörüne kopyalayın.

jaxb-api.jar, jaxb-impl.jar, jaxb-xjc.jar, activation.jar ve jsr173_api.jar liblerini de jaxb kurulum klasöründe alıp projeye lib olarak ekleyin veya projede external olarak onları referans gösterin.


şimdi asıl işimize geldik. unmarshall yapan kod bloğumuz şöyle olabilir;

JAXBContext jc = JAXBContext.newInstance("org.karatas.test.po");
Unmarshaller u = jc.createUnmarshaller();
PurchaseOrder po=(PurchaseOrder)u.unmarshal(new File("D:\\workarea\\po.xml"));

System.out.println("============shipto==========");
List stlist = po.getShipTo();
for (Iterator iterator = stlist.iterator(); iterator
.hasNext();) {
ShipTo shipTo = (ShipTo) iterator.next();
System.out.println("Name=" + shipTo.getName());
System.out.println("street=" + shipTo.getStreet());
System.out.println("city=" + shipTo.getCity());
System.out.println("state=" + shipTo.getState());
System.out.println("zip=" + shipTo.getZip());
System.out.println("country=" + shipTo.getCountry());
}


gördüğünüz gibi xml dosyasını çok kolay bir şekilde java objelerinden okuduk. unmarshal paketinin classları ve detaylı kullanımı için adresine bakabilirsiniz.


MARSHALLING (Java Object to XML)
şimdi marshalling işini yapan kodumuzu aşağıya alalım.


JAXBContext jc = JAXBContext.newInstance("org.karatas.test.po");
Marshaller m = jc.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);

ObjectFactory of = new ObjectFactory();
PurchaseOrder po = of.createPurchaseOrder();

po.setOrderDate(new Date().toString());

ShipTo shipto = of.createPurchaseOrderShipTo();
shipto.setCity("NewYork");
shipto.setCountry("US");
shipto.setName("Muhammet Simsek");
shipto.setState("NY");
shipto.setStreet("265 Garden Street");
shipto.setZip("12530");
po.getShipTo().add(shipto);

Items items=of.createPurchaseOrderItems();

Item item = of.createPurchaseOrderItemsItem();
item.setPartNum("NY-567");
item.setProductName("The GodFather");
item.setQuantity("5");
item.setUSPrice("35.25");
items.getItem().add(item);

po.getItems().add(items);
m.marshal(po, new FileWriter(new File("D:\\workarea\\po22.xml")))


marshal olayı için gene yukarıdaki projemiz üzerinde çalışalım.
Dikkat edecek olursanız hep JAXBContext objesini kullanıyoruz. Bununla çalışacağımız contexi veriyoruz. Ondan sonra ya Unmarshaller ya da Marshaller objelerini kullanıyoruz. Dolayısıyla xml ile çalışmak için çok fazla şey öğrenmeye gerek yok.

Gördüğnüz üzre xsd de verdiğimiz yapının istediğimiz tarafını doldurup istediğimiz tarafını boş bırakabiliriz.

bu tutorial ın dosyaları için lütfen tıklayınız.
Projeyi çalıştırma konusunda sıkıntı yaşarsanız bana yazabilirsiniz.


Konu ile ilgili detaylı bilgi için http://java.sun.com/webservices/docs/1.6/tutorial/doc

Herkese iyi çalışmalar...

Pazartesi, Aralık 15, 2008

Log4j tutorial

Log4j javada loglama için kullanılan önemli ve güzel özellikleri olan bir Java API sidir. Log4j yi herhangi java projenizde kullanabilirsiniz. log4j kurulumu için;

1. http://logging.apache.org/log4j/1.2/download.html adresinden apache-log4j-1.2.?.jar ı indirin.

2. log4j-1.2.*.jar lib dosyasını projenize ekleyin. bu jar WEB-INF/lib in altında olması gerekiyor.

3. log4j.properties dosyasını oluşturun. bu dosyanız src klasörünüzün hemen altında olsun. isterseniz log4j.xml dosyasını da oluşturabilirsiniz. çünkü java önce log4j.xml dosyasının var olup olmadığına bakar sonra log4j.properties dosyasına bakar. ama xml yazmak daha karışk gelecektir. buna karşın config dosyası oluşturmak daha kolay olduğu için genelde .properties dosyası oluşturulur.

log4j.rootLogger=debug,sysout,fileout

# sysout log configuration
log4j.appender.sysout=org.apache.log4j.ConsoleAppender
log4j.appender.sysout.Target=System.out
log4j.appender.sysout.Threshold=info
log4j.appender.sysout.layout=org.apache.log4j.PatternLayout
log4j.appender.sysout.layout.ConversionPattern=%d{dd.MM.yyyy HH:mm:ss} %5p (%F:%L) - %m%n

#fileout log configuration
log4j.appender.fileout=org.apache.log4j.DailyRollingFileAppender
log4j.appender.fileout.ImmediateFlush=true
log4j.appender.fileout.Threshold=INFO
log4j.appender.fileout.File=applog.log
log4j.appender.fileout.layout=org.apache.log4j.PatternLayout
log4j.appender.fileout.DatePattern='.'yyMMdd'.txt'
log4j.appender.fileout.layout.ConversionPattern=%d{dd.MM.yyyy HH:mm:ss} %5p (%F:%L) - %m%n

gördüğünüz gibi bu konfigürasyon dosyasında hem dosyaya hemde system out a yazıyoruz.

4.Javada loglama için ise şöyle basitçe kullanımı var.

.
.
private static org.apache.log4j.Logger log = Logger.getLogger(MyLogger.class);
log.info("info message");
log.error("error message");
log.warn("warn message");
.
.


isterseniz loglarınızı mail olarak da gönderebilirsiniz. bu durumda log4j.rootLogger=debug,sysout,fileout,mail şeklinde rootlogger ı değiştirmeniz gerekir.


#email appender
log4j.appender.mail=org.apache.log4j.net.SMTPAppender
#defines how othen emails are send
log4j.appender.mail.BufferSize=1
log4j.appender.mail.SMTPHost="smtp.myservername.xx"
log4j.appender.mail.From=fromemail@myservername.xx
log4j.appender.mail.To=toemail@myservername.xx
log4j.appender.mail.Subject=Log ...
log4j.appender.mail.threshold=error
log4j.appender.mail.layout=org.apache.log4j.PatternLayout
log4j.appender.mail.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n


Eğer projenizi weblogic server a deploy ediyorsanız loglama sorunu yaşayabilirsiniz. çünkü weblogic server önce kendi loglama mekanizmasına bakıyor ve onu kullanıyor. kendi projenizdeki loglama mekanizmasını öncelemek için aşağıdaki parametreleri weblogic.xml dosyasına ekleyerek deploy yaparsanız sorun çözülür.
<container-descriptor>
<prefer-web-inf-classes>true</prefer-web-inf-classes>
</container-descriptor>


log4j dosyasının detaylı kurulumu için
http://www.vipan.com/htdocs/log4jhelp.html adresine gözatmanızda yarar var.

Cuma, Aralık 05, 2008

Aralık Ayı takvimi

JavaFX aramızda

Merakla beklenen JavaFX platformu artık aramızda. JavaFX kısaca cross-device denen bütün araçlarda çalıştırabileceğiniz uygulamaları tek seferde yazma imkanı verir. yani yazdığınız uygulama hem browserda, hem palm cihazınızda ve hemde cep telefonunuzda görüntülenebilir. Rich Internet Application(RIA) yani zengin içerikli internet uygulamaları yazmak ve onu her türlü platformda yayınlamak artık daha kolay.

JavaFX indirmek için buraya ;

JavaFX in tutorialları için ise buraya tıklayabilirsiniz.

Sizi bilmem ama açıkçası JavaFX beni heyecanlandırdı.

Çarşamba, Kasım 26, 2008

Salı, Kasım 25, 2008

JSF te custom validation

Merhabalar,
jsf te validasyonların ne kadar kolay yapıldığını görelim istedim. normal bir jsf sayfasında hazır validasyonlardan;
f:validateLength
f:validateDoubleRange ve
f:validateLongRange kullanılarak girilen değerin uzunluk aralığını ve nullable ını kontrol edebiliriz.

örnek olarak;

vererek girilen değer aralığının 3 ile 15 arasında olmasını sağlarız.

asıl üzerinde duracağımız ise custom validasyonlar;
custom validasyon yazmak için tek yapmamız gereken Validator interface ini implement etmek. classı implement ettiğimizde validate metodunu da override etmemiz gerekir. ikinci adımda validasyon classımızı faces-config dosyasına yazıyoruz. üçüncü adımda ise kullanıyoruz. şöyle ki;

1.

package test.validator;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.Validator;
import javax.faces.validator.ValidatorException;

public class AmountTypeValidator implements Validator {

public void validate(FacesContext arg0, UIComponent arg1, Object val) throws ValidatorException {
// TODO Auto-generated method stub
if ((val != null) && (!val.equals("select"))) {
return;
} else {
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Please Select Amount Type",
"Please Select Amount Type");
message.setSeverity(FacesMessage.SEVERITY_ERROR);
throw new ValidatorException(message);
}
}
}

eğer değerimiz null ise veya "select" ise o zaman uyarı veriyoruz.

2:

<validator>
<validator-id>AmountTypeValidator</validator-id>
<validator-class>test.validator.AmountTypeValidator</validator-class>
</validator>


3:

<h:selectOneMenu id="discountAmountType" required="#{testBean.amountTypeRequired}" value="#{testBean.selectedAmountType}">
<f:validator validatorId="AmountTypeValidator" />
<f:selectItem itemValue="select" itemLabel="Please Select" />
<f:selectItem itemValue="TRY" itemLabel="TRY" />
<f:selectItem itemValue="USD" itemLabel="USD" />
<f:selectItem itemValue="EUR" itemLabel="EUR" />
<f:selectItem itemValue="KILO" itemLabel="KILO" />
</h:selectOneMenu>

Cuma, Kasım 21, 2008

Ceturk yazılım seminerleri

Merhaba Arkadaşlar,

Ceturk bugüne kadar sürdürdüğü anlamlı ve faydalı seminerlerine bir yenisini daha ekliyor. Faydalı sunumların olduğu seminer 22 kasım da gerçekleştirilecek.

Cuma, Kasım 14, 2008

Blogger da html kod yayınlama problemi

Bloggerda blog oluşturmaya başladıktan sonra bloggerın yazdığım kodları yayınlayamadığımı gördüm. bu bloggerda blog yayınlayan bütün programcılar için bir sorun maalesef. bunun için küçük bir script ile işi çözebiliriz.

aşağıya aldığım java kodunu kullanarak burada yayınlayacağınız kodu önce dönüştürüp sonra da yayınlarsınız. sorun çözülmüş olur.

package org.karatas.test.misc;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;

public class BloggerCodeGenerator {
public static void main(String[] args) {
BloggerCodeGenerator gen=new BloggerCodeGenerator();
gen.generateCode();
}

public void generateCode(){
String newCode="";
try {
File file=new File("D:\\workarea\\text.txt"); //yayınlayacağımız kodu önce bir dosyaya yazabiliriz mesela.

BufferedReader br=new BufferedReader(new FileReader(file));
String str="";
while((str=br.readLine())!=null){
newCode+=str.replaceAll("<", "< işaretinin karakter karşılığı").replaceAll(">", "> işaretiin karakter karşılığı");
}
} catch (Exception e) {
e.printStackTrace();

}
System.out.println(newCode);
}
}

JSF rich:combobox problemi

sayfanızda daha güzel diye rich:combobox kullanmaya kalkışırsanız benim gibi neye uğradığınızı şaşırırsınız. çünkü rich:combobox value ve label değerini ayrı ayrı veremiyorsun. daha doğrusu label yok. sadece value değerini label olarak gösteriyor.
söz gelimi siz;

<rich:comboBox><f:selectItem itemValue="1" itemLabel="label1" />
<f:selectItem itemValue="2" itemLabel="label2" />
<f:selectItem itemValue="3" itemLabel="label3" />
<f:selectItem itemValue="4" itemLabel="llabel4" />
<f:selectItem itemValue="5" itemLabel="llabel5" />
</rich:comboBox>

yazdığınızda üretilen combobox ta label1 .. label5 görmeyi umuyorken 1,2..5 görürsünüz.

Bunu bir bug olarak yazmışlar jboss a ama bug değil kendi özelliği böyle. keşke bug olsaydıda düzeltilseydi. çünkü güzel özellikleri olan bir component.

ne diyelim clasik h:selectOneMenu ya devam :)

Pazartesi, Kasım 03, 2008

xmlbeans ile xml parse etme

bugünkü yazımızda xmlbeans ile daha kolay xml parsetme yöntemine bakalım.

xmlbeans sizin için sizin xml yapınıza uygun java objeleri oluşturur. bunu yaptıktan sonra sizin yapmanız gereken o objelerin değerlerini almanız veya onlara değer atmanız.

öncelikle xmlbeans i indirmeniz gerekecek. indirdikten sonra dosyayı extract etmeniz gerekiyor. extract edilen klasörün içindeki bin klasörünü sistem pathinize ekleyin. bunu yaptıktan sonra command prompptan scomp yazdığınızda komut tanınmış olacak. böyleylikle xmlbeans imiz kuruldu.

bundan sonra artık işe başlıycaz. birinci işimiz parse edeceğimiz xml file ı xml schema(xsd) ya çevirmek. bunun için bir dizi uygulama ve online tool var. her zaman elinizin altında olması açısından online bir toolu tercih edebilirsiniz. xmlinizi şu adreste xsd ye çevirdikten sonra çok işimiz kalmıyor.

command prompta girelim. scomp yazıp entera bastıktan sonra seçenekleri göreceksiniz . Aşağıdaki şekli ile basitçe işimizi görebiliriz;

scomp -out note.jar note.xsd

config.xsdconfig adında bir dosya oluşturarak package yapınızı verebilirsiniz.

Bu dosyayı da tanıdıktan sonra komut yapımızı şu şekilde düzenleyebiliriz;

scomp -out note.jar note.xsd config.xsdconfig

buarada xsd dosyanız ve config dosyanız bulunduğunuz dizinde olmalı bunu unutmayalım.

şimdi de xmlimizi okuyalım;

File file=new File("D:\\workarea\\note.xml");
NoteDocument notedoc=NoteDocument.Factory.parse(file);
NoteDocument.Note note=notedoc.getNote();
System.out.println("note from:"+note.getFrom());


Önemli Not: xmlinizi xsdye çevirirken veya çevirdikten sonra okurken zorlukla karşılaşırsanız. xsd schemanızı kontrol edin. zira xsd oluşturduğunuz xml yapınız farklı olabilir. o yüzden gerekirse manuel olarak xsd de değişklik yapabilirsiniz. birde xbean.jar ve jsr***.jar liblerini proje pathine eklemeyi unutmayalım.

görüşmek üzere...

Cuma, Eylül 19, 2008

Web yazılımcısının bedava malzeme çantası - Firefox Add-ons

eğer bir web yazılımcısı iseniz veya web designerı iseniz sizin için olmazsa olmazlar listesinde firefox pluginleri olmalı bence. firefox ta işiniz kolaylaştırcak o kadar çok eklenti varki bunları tanıdığınızda vazgeçemiyceksiniz. bunlardan bir kaç tanesini sizinle paylaşayım istedim.

Web Developer : https://addons.mozilla.org/en-US/firefox/addon/60
Bu toolu eklediğinizde firefox browserınızda bununla ilgili bilgiler göreceksiniz. girdiğiniz web sayfasının css lerini izleme, düzenleme, html kodunu gene online izleme ve düzenleme sayfadaki formları tablolar vs işaretleme inceleme gibi bir sürü şey yapabilirsiniz

Firebug https://addons.mozilla.org/en-US/firefox/addon/1843

Buyrun size en önemli eklentilerden bir tanesi. javascript debuging bunun en önemli maharetlerinden bir tanesi ki piyasadaki en başarılı free tool bence. sayfadaki herhangi bir şeyin üstüne gelip "inspect element" dediğinizde sizi hemen onun koduna götürecektir. Neyse özelliklerini anlatmakla bitiremiycem iyisimi siz inceleyin.

YSlow
https://addons.mozilla.org/en-US/firefox/addon/5369

sizin bir sayfanız var ve sayfanın ne kadar hızlı yüklendiğini, sayfadaki hangi özelliğin onu yavaşlattığını, sayfanızı hızlandırmak için neler yapmanız gerektiğini öğrenmek istiyorsanız buyrun size bu eklentiyi kullanın.

daha neler neler,

en iyisi siz https://addons.mozilla.org/en-US/firefox/ girin ihtiyacınız olan malzemeyi alın.

selam ile...

java.lang.NoSuchMethodError: javax.servlet.jsp.tagext.TagAttributeInfo.(Ljava/lang/String;ZLjava/lang/String;ZZ)

Uzun aradan sonra tekrar merhabalar diyerek, bir ara karşılaştığım bir hatayı sizinle paylaşayım istedim.

efendim yukarıda adı geçen hata şundan kaynaklanıyordu;
projede jsp 2.0 altyapısı ve tagları kullanıldığı halde jsp1.1 veya 1.2 classları jsp2.0 classlarından önce load oluyordu classloader tarafından. bu classlar da weblogic80.jar ındaydı. weblogic80 jarını çıkartıp bir üst versiyon olan weblogic811.jar ı jre/lib/ext ye atınca hata giderildi.

Anlıycağınız sizin proje altyapınız ve kullandığınız libler uyumlu olmalı...

Perşembe, Haziran 22, 2006

blog ihtiyacı

bazı zamanlar olur paylaşmak istersiniz içinizdekini bir dost bulup paylaşırsınız...
bazı zamanlar olur ağlamak istersiniz bir sırdaş bulup ağlarsınız...
bazen konuşmak istersiniz bir arkadaş bulup konuşursunuz..
ama bazen elinizdekini herkesle ama herkesle, dünyanın her tarafındaki meslektaşlarınızla paylaşmak istersiniz o zaman ne yaparsınız?
ben bunun için blog sayfası oluşturmaya karar verdim. free olarak paylaşmak istediğim herşeyi burda sizinle paylaşırım.