Blog

Blog from June, 2007

JSF oldalon Captcha

Az EmForge portál készítői közzétettek egy olyan Captcha komponenst, amelyet JSF oldalunkba tudunk ágyazni, illetve egy validátorral ellenőrizni tudjuk a felhasználók által beírt értéket. A JSF oldalunkba az alábbi kis programrészlet felelős a kép generálásáért, s a hozzá tartozó MBean kezeli le a felhasználó által beírt adatok helyességét és a hibát kezelését is:

<s:graphicImageDynamic id="captcha" imageRendererClass="#{registerController.captchaRenderer}">
</s:graphicImageDynamic>

Az komponens forrása rövid és tömör (), túl sok mozgástér nincs benne, de a nyílt forrás okán bele tudjuk illeszteni a saját igényeinket, s ezt a módosítást közzé is tehetjük mások örömére...

Szinte mindenki tudna mesélni elrettentő példákat, amelyekkel pályafutása során találkozik, esetleg önmaga követ el szándékosan vagy véletlenül. Egy blogbejegyzésben Code of Horror címmel bukkanhatunk egy kisebb gyűjteményre, amely - alkattól függően - mosolyt, röhögögörcsöt vagy maradandó szemöldökrángást okozhat... Néhány szemelvény a hibakezelést illetően:

Java forrás
try
{
  // Itt pár sor programunk van
}
catch (Exception e)
{
  throw e;
}

Ennek egy javított verziója:

Java forrás
try
{
  // Ismét pár sor program
}
catch (Exception e)
{
}

Esetleg egy kis hiányosság a referenciákat illetően:

Java forrás
X x=new X();
x.list.add("...");
X y=x;
x.list=null;
y.list.add("...");

Gyakori feladat, hogy számokat tartalmazó szövegeket kell rendeznünk természetes módon, amely azt eredményezi, hogy a szövegként tárolt számok rendezése nem lesz megfelelő: az ["1","3","21"] számok szövegként való rendezése után ["1","21","3"] sorrendbe kerülnek. A szűkebb Java nem ad erre eszközt és sajnos tágabb körben is probléma marad ez a probléma: nincs erre megoldás még a népszerű Jakarta Commons gyűjteményben sem. Ezt a problémát járta körül az In My Opinion blog írója is, s az alábbi megoldásokat találta:

Az oldalon készítettek egy tesztkörnyezetet, amelyben kipróbálták a felsorolt implementációkat, s az alábbi eredményeket kapták:

Pierre-Luc PaourNaturalOrderComparator453msEléggé gyors
Stephen FriedrichNaturalComparator4828msLocale szerint rendez, de lassú
Stephen FriedrichNaturalComparatorAscii360msA leggyorsabb, de csak ASCII
Stephen FriedrichNaturalComparatorIgnoreCaseAscii500msEléggé gyors, de case-insensitive, de csak ASCII
Tim FennellHumaneStringComparator 4797msOktatásra kiváló
Natív JavaString.compareTo()235ms-