BAB 6 JSP Lanjutan - JENI-Web Programming-Bab 6-JSP Lanjutan

  6 .1 Pe n da h u lu a n

  Dalam pem bahasan JSP sebelum nya, Kit a t elah m em pelaj ari synt ax dasar : bagaim ana cara m enggunakan script let s, expressions, JavaBeans, dan JSP act ion yang sudah dikenal unt uk m enyediakan dat a dinam is besert a cont ent yang st at is; bagaim ana m enggunakan direct ive unt uk m enam pilkan perint ah pengolahan halam an yang spesifik kepada cont ainer. Kit a j uga t elah m enguraikan peran JSP di dalam suat u aplikasi web unt uk bert indak sebagai layer present asi dan lain- lain.

  Pokok pem bahasan lainnya yang dij elaskan pada bab sebelum nya adalah kem am puan JSP unt uk m enghasilkan cont ent yang dinam is selam a penyim panan elem en pem rogram an dibuat m enj adi m inim alis. Hal ini unt uk m em enuhi kepada personil layer present asi yang dipersem bahkan kepada siapapun yang m em iliki sedik it pengalam an dalam pem rogram an dengan Java at au bahasa pem rogram an lainnya. Perubahan ke bent uk berbasis t ext sangat banyak m engurangi baris dari perancang kode dibandingkan dengan servlet : kem udian cont ent file JSP m enj adi sangat m irip dengan st andard HTML yang digunakan unt uk handling. Proses refact or logika dari JSP ke dalam servlet dan m enunj ukkan hasil sebagai JavaBeans yang selanj ut nya m engurangi j um lah t ersebut . Meskipun dem ikian dalam posisi ini, kode Java ( m elalui script let ) m erupakan elem en yang t idak dapat dihindari unt uk JSP. Ada kem am puan yang sederhana yang t idak dapat dit unj ukkan oleh elem en JSP yang dibahas sej auh ini, sepert i it erasi list dan logika bersarang( pernyat aan if- else) . Pada bab ini, Kit a akan m em bahas dua elem en JSP yang akan m engurangi pem akaian script let dan expression dalam JSP m enj adi nol. Mereka m em berikan sebuah m et hod alt ernat if dalam m enunj ukkan kem am puan dim ana sebelum nya diserahkan kepada script let dan expression dalam sebuah bent uk yang lebih m udah dan lebih m udah dit erim a unt uk personil dengan lat ar belakang pem rogram an yang m asih pem ula.

  6 .2 Ex pr e ssion da la m JSP

  Sat u dari dua elem en JSP yang akan Kit a pelaj ari dalam bab ini adalah JSP Expression Language( EL) .Expression Language ini diperk enalkan dengan spesifikasi JSP 2.0 dan disediakan sebuah synt ax sederhana dan j elas unt uk m enulis expression yang m elakukan logika sederhana at au m engakses lingkup nilai.

  Kegunaan JSP EL lebih baik dij elaskan dalam sebuah cont oh sederhana. Menggunakan m et hod yang dibahas dalam bab sebelum nya, j ika Kit a ingin m engakses propert y dari sebuah JavaBean, Kit a j uga bisa m enggunakan :

  <% String name = user.getLastName(); %> at au <jsp:getProperty name="user" property="lastname"/>

  Menggunakan m et hod yang pert am a, pengem bang diarahkan ke konsep pem rogram an Java : unt uk m engakses propert i dari sebuah bean, pengem bang diharapkan t elah m em buat m et hod get t er dari sebuah bean. Pengem bang j uga perlu m em aham i propert y dari t ipe Java. Met hod yang kedua lebih cenderung ke pem rogram an yang net ral : akses ke propert y sebuah bean dikerj akan oleh t ag- t ag yang secara konsep ham pir sam a dengan t ag- t ag HTML. Bagaim anapun j uga, m et hod m engakses propert y bean ini panj ang dan susah. Dan j uga, m et hod ini hanya dapat digunakan unt uk out put langsung kepada user. Menggunakan EL, propert y bean dapat diakses sebagai :

  ${user.lastName} Konsep diat as adalah pem rogram an net ral : pengem bang t idak harus m enget ahui j enis Java at au synt ax. Konsep t ersebut j uga pendek dan langsung ke t it ik perm asalahan : konsep hanya berisi variabel yang t erj angkau dan propert y unt uk diakses, dengan penam bahan sedikit charact er. Dan j uga, dapat digunakan bersam a unt uk m enam pilkan out put langsung ke user, at au unt uk m em bongkar nilai unt uk t ag yang sesuai unt uk diproses.

  6 .2 .1 Syn t a x EL Lit e r a ls

  EL didesain unt uk bersifat sederhana dalam synt axnya. Pada dasarnya, konsep EL bisa m erupakan lit eral at au expression yang dit ulis diant ara ${ dan } . EL m endukung lit eral sepert i berik ut :

  • Boolean •

  Long

  • Float
  • St ring
  • Null Lit eral EL diperlakukan secara sam a sebagaim ana di dalam Java. Sebagai cont oh, nilai boolean dapat bernilai t rue at au false, nilai St ring m em but uhkan pem bat as di dalam t anda double pet ik ( " " ) at au t anda pet ik ( '') , null m enggam barkan nilai yang kosong. Lit eral dengan sendirinya m em punyai sedikit nilai fungsional didalam sebuah bahasa expression. EL j uga m enggam barkan st andard operat or yang dapat digunakan pada lit eral. Sebuah set t erapat operat or arit m at ika dasar ( + ,- ,* ,/ ,% ) ,operat or logikal ( &&,| | ,! ) dan operat or pem banding( = = ,! = .< .< = ,> ,> = ) .
EL j uga m enggam barkan kat a- kat a kunci yang m enyerupai fungsi dari beberapa operat or- operat or : and ( &&) , eq ( = = ) , gt ( > ) , ge( > = ) , or ( | | ) , ne ( ! = ) , le ( < = ) , lt ( < ) , div ( / ) , and m od ( % ) . Dan j uga m enggam barkan kat a- kat a kunci lainnya :

  • True – berhubungan dengan nilai lit eral boolean
  • false – berhubungan dengan nilai lit eral boolean
  • inst anceof - serupa dengan kat a kunci Java. Menent ukan apakah sebuah obj ek adalah anak dari obj ek yang diberikan j enisnya.
  • >Null – serupa dengan kat a kunci Java. Menent ukan sebuah nilai
  • em pt y – dapat digunakan dalam berbagai cara. Ket ika dit erapkan pada lit eral array at au inst ans sebuah obj ek Collect ion, m enent ukan apakah berisi sebuah nilai at au t idak.

  Berikut adalah cont oh expression EL, diberikan apa yang t elah Kam i kerj akan selam a ini : ${ 'JEDI '} - m enghasilkan St ring 'JEDI ' ${ 5 + 37} - m enghasilkan 42 ${ ( 10 % 5) = = 2} - m enghasilkan t rue ${ em pt y ''} - m enghasilkan t rue

  6 .2 .2 M e n ga k se s va r ia be l Scope da n Pr ope r t ie s

  Selam a m am pu unt uk m engevaluasi expression lit eral sederhana sangat lah berguna, EL m enunj ukkan banyak kegunaannya ket ika m engakses dan m engolah variabel da propert ies dalam scope yang berbeda. Mengakses variabel begit u sederhana dengan EL : m ereka hanyalah m engacu pada nam a, propert ies Bean, m et hod, dan array. Sem ua dapat diakses dari penam aan variabel m enggunakan not asi " ." . Hal ini digam barkan oleh cont oh pert am a Kam i :

  ${ user.last Nam e} Hal ini m engakses sebuah JavaBean dim ana dapat disesuaikan dengan nam a user dan m enerim a nilai propert y last Nam e. Dengan cat at an bahwa scope dari bean t idak berart i. EL m elakukan pencarian unt uk Kit a, m engecek di dalam halam an, perm int aan, session dan scope aplikasi ( dengan perint ah) unt uk sebuah bean dengan nam a yang spesifik. Jika EL disediakan nam a bean yang t idak ada di dalam scope m anapun, m aka nilai null akan dikem balikan.

  6 .2 .3 Obj e ct I m plisit EL

  Sem ent ara it u pencarian ot om at is scope m em buat hal t ersebut lebih m udah unt uk pengem bang dalam m enulis kode, m enet apkan scope variabel dengan t egas m em perm udah unt uk m em elihara oleh pengem bang yang akan dat ang. EL m enyediakan unt uk kit a dengan beberapa obj ect im plicit yang m ewakili sebuah Map obj ect didalam scope yang berbeda

  • pageS
  • request Scope • sessionScope
  • applicat ionScope

  Sebagai cont oh, j ika obj ect user kit a sebelum nya dilet akkan didalam scope session : ${ sessionScope.user.last Nam e}

  Terkecuali di at as, EL j uga m enggam barkan obj ect im plicit berikut :

  • Param – m ewakili sebagai sebuah perm int aan nam a dan nilai param et er Map.Sebagai

  cont oh m eng- invoke ${ param .loginNam e} sam a sepert i unt uk m em anggil request .get Param et er( “ loginNam e” ) . Nilai yang disim pan disini adalah nilai St ring single.

  • Param Values – obj ect im plicit ini adalah sebuah Map dim ana nam a param et er Map yang bert ipe array St ring perwakilan nilai unt uk sebuah nam a. Meng- invoke ${ param Values.choices} adalah sam a dengan m em anggil request .get Param et erValues( “ choices” ) .
  • Header – sebuah Map m ewakili header yang t erdapat dari sebuah perm int aan yang diberikan. Cont ent nya serupa dengan yang dit erim a pada saat m em anggil m et hod get Header dari sebuah obj ect Servlet Request .
  • >HeaderValues – sebuah Map m ewakili header yang t erdapat dari sebuah perm int aan. Cont ent nya serupa dengan yang dit erim a pada saat m em anggil m et hod get Header dari sebuah obj ect Servlet Reque
  • Cookies – Map dari single cookies t erdapat di dalam sebuah perm int aan. Serupa dengan m eng- invoke m et hod get Cookies dari sebuah obj ect Ht t pServlet Request .

  6 .2 .4 N ot a si [ ]

  Selain not asi “ .” , EL j uga m enyediakan not asi “ [ ] ” dalam m engakses variabel anggot a, m et hod, dan array. Dalam banyak hal, kedua not asi adalah sam a : ${ user.last Nam e} sam a sepert i ${ user[ last Nam e] } .

  6 .2 .5 JSTL

  JSP Expression Language yang t elah kit a uraikan diat as t elah m enyediakan unt uk Kit a dengan sebuah m et hod sederhana dan nyam an dalam m engakses scope propert ies dan m enunj ukkan expression sederhana. Bagaim anapun j uga, dengan sendirinya it u t idak m em bebaskan kit a dari penggunaan script let di dalam halam an JSP Kit a. Unt uk m elakukannya, Kit a kem bali lagi kepada t ag- t ag yang sesuai, khususnya dengan Java St andard Tag Library.

  6 .2 .6 Ta g- Ta g cu st om

  Salah sat u poin t erkuat dari spesifikasi JSP adalah karena m em pert im bangkan seberapa besar proses penyesuaian dan st abilit as m elalui penggunaan t ag- t ag cust om . Telah ada t ag- t ag khusus yang digam barkan dalam spesifikasi yang m elaksanakan t ugas- t ugas khusus : st andard JSP act ion < j sp: useBean> , < j sp: get Propert y> , dan < j sp: set Propert y> adalah sebuah cont oh yang sem purna. Tag m enyediakan sebuah cara unt uk m engungkapkan kem am puan “ dit ulis ulang” di dalam halam an JSP m enggunakan sebuah t am pilan yang sangat sederhana ket ika m enyem bunyikan im plem ent asi yang int ernal. Pengem bang dapat m em buat t ag- t ag Mereka sendiri selam a hal ini dirasa sangat m engunt ungkan diri Mereka.

  Dengan j enis kem am puan “ dit ulis ulang” ini ( t ag- t ag cust om dapat digunakan di banyak aplikasi web dengan ket ent uan bahwa im plem ent asi JAR dan deskript or t elah dipaket kan dengan aplikasi web t ersebut ) , hal t ersebut akan m enj adi biasa bahwa sat u set t ag cust om akan dikem bangkan oleh program m er dan digunakan unt uk berbagai j anis arsit ekt ur fram ework at au cont ainer JSP yang sesuai. Ada sej um lah library t ag yang t ersedia, dan t ak t erelakkan bagi m ereka unt uk m em iliki beberapa m acam overlap di dalam fungsi yang m ereka sediakan.

  Java t elah m engenal akan hal ini dan dalam kerj a sam a dengan kom unit as pem rogram an t elah m enyediakan sebuah t ag library st andard yang m em ilih bidang- bidang overlap yang disebut Java St andard Tag Library at au JSTL

  6 .2 .7 M e m a su k k a n JSTL da la m a plik a si Kit a

  Unt uk m em asukkan fungsi JSTL dalam aplikasi Kit a, unpack file zip yang didapat dari dow nload, dan copy- kan file st andard.j ar dan j st l.j ar yang t erdapat pada direkt ori / lib ke dalam direkt ori / lib dari aplikasi Kit a. Ada beberapa set t ag library yang dipaket kan dengan JSTL. Berikut , Kit a akan m em bahas dua : Core t ag library dan SQL t ag library.

  6 .2 .8 Cor e

  set t ag Core m enyediakan fungsi yang sangat berguna unt uk set iap proyek web. Set Core dapat dibagi m enj adi sub kat egori sebagai berikut :

  • General purpose t ags
  • I t erat ion
  • Condit ionals
  • URL m anipulat ion
CATATAN : unt uk set iap halam an JSP yang akan m enggunakan fungsi yang t erdapat dalam Core t ag library, harus m enam bahkan direct ive pada halam an t ersebut : < " prefix="c" %>

  I ni m enunj ukkan bahwa t ag- t ag didalam core library m enggunakan prefix c

  6 .2 .9 Ge n e r a l Pu r pose Ta gs

  General purpose t ag di dalam set Core m engerj akan pekerj aan yang sederhana, m eskipun salah sat u dari m ereka t idak relevan sej ak dikeluarkannya spesifikasi JSP 2.0. Tag- t ag yang t erdapat dalam set general purpose adalah : out , set , rem ove, dan cat ch. < c: out > Tag < c: out > m enerim a sebuah EL expression, m engevaluasi hasilnya dan kem udian m enam pilkan hasil secara langsung kepada obyek Writ er yang sesuai dengan halam an out put . Tag ini berfungsi sepert i st andard act ion < j sp: get Propert y> , dengan perkecualian bahwa sebuah JavaBean t idak dibut uhkan unt uk m engakses fungsi. Bagaim anapun j uga, dengan dikeluarkan spesifikasi JSP 2.0, t ag ini m enj adi agak basi : EL expression dapat dievaluasi langsung m enj adi st ream out put dalam set iap bagian halam an JSP t anpa m enggunakan t ag- t ag dengan JSP 2.0 < c: set > Tag ini bekerj a sepert i fungsi act ion < j sp: set Propert y> dim ana dapat m engat ur nilai di dalam t arget JavaBean. Dan j uga dapat m engat ur variabel di dalam scope t ert ent u sehingga dapat digunakan set elahnya oleh JSP at au disuat u t em pat di dalam aplikasi. Act ion ini m em iliki at ribut :

  • Value – nilai yang akan diat ur kedalam t arget bean.
  • Var – nam a dari sebuah variabel yang akan diat ur didalam scope t ert ent u
  • >scope – m enj elaskan variabel scope yang dij elaskan oleh at ribut var. Nilainya bisa j adi sepert i berikut ini : page, request , session, dan aplik
  • Target – nam a dari JavaBEan dim ana propert y akan diat ur
  • propert y – nam dari propert y dalam JavaBean yang akan m enerim a nilai.

  Sepert i yang dij elaskan sebelum nya, ada dua penggunaan ut am a unt uk t ag ini. Unt uk m engat ur nilai dalam sebuah t arget JavaBean, t ag hanya m enggunakan at ribut value, t arget , dan propert y <c:set target="user" property="name" value="JEDI"/>

  Unt uk m engat ur sebuah variabel kedalam sebuah scope t ert ent u unt uk penggunaan yang akan dat ang, t ag < c: set > hanya m enggunakan at ribut value, var, dan scope, m eskipun dem ikian at ribut scope adalah t am bahan saj a. Ket ika at ribut scope dihilangkan, ot om at is default nya m enggunakan scope halam an.

  <c:set var="myString" value="This is a test String"/> Dalam t uj uan t ent ang pem bat asan JSP unt uk pada present asi, m eskipun dem ikian kit a seharusnya m em bat asi penggunaan t ag ini. Mengat ur propert ies bean at au m engat ur variabel ke dalam scope yang berbeda m em bukt ikan bahwa fungsi dapat di refact or disuat u t em pat dan t idak baik dengan dom ain lapisan present asi.

  < c: rem ove> t ag ini m enyediakan cara unt uk m enghapus variabel dari scope t ert ent u. Tag ini m em iliki dua at ribut :

  • Scope – scope variabel yang akan dihapus
  • var – nam a variabel yang akan dihapus dari scope t ert ent u

  Sepert i t ag < c: set > , m enggunakan t ag ini seharusnya dibat asi. Mem bebaskan variabel dari scope yang beragam adalah bukan wilayah obj ek didalam lapisan present asi; j enis fungsi ini dapat dij abarkan disuat u t em pat di dalam aplikasi.

  < c: cat ch> Tag < c: cat ch> m enyediakan kem am puan penanganan error di dalam sebuah area dalam JSP. Tag ini m udah digunakan : let akkan isi JSP yang m em ungkinkan m elem par error dalam t ubuh t ag < c: cat ch> .

  Tag ini hanya m em iliki sat u at ribut :

  • Var – m enj elaskan nam a yang akan digunakan unt uk m enggam barkan t hrown except ion.

  6 .2 .1 0 I t e r a si

  Tag it erasi JSTL m enyediakan alt ernat if unt uk m enem pelkan do- while, while dan for didalam halam an JSP Kit a sebagai script let . JSTL m enyediakan dua t ag : < forEach> dan < forTokens> . < c: forEach> Ternyat a sem akin banyak digunakan it erasi t ag saat ini. Tag ini m engij inkan it erasi m elaui array prim it if, inst ans dari j ava.ut il.collect ion, j ava.ut il.it erat or, j ava.ut il.m ap, dan j ava.ut il.enum erat ion. Bekerj a dengan m elalui set iap elem en dalam t arget dan m enggam barkan nilai yang ada dari it erasi ke kode JSP yang berisi di dalam body t ag. Tag ini m em ilik i at ribut :

  • • Var – m enj elaskan nam a variabel yang akan digunakan unt uk m enggam barkan nilai yang

  ada dari it erasi ke body t ag. Jenisnya t ergant ung pada pada collect ion yang m enj adi it erasi diat as. Nilai dari t ag ini t idak bisa sat u expression dim ana akan dievaluasi pada saat runt im e.

  • I t em s – m enj elaskan collect ion m enj adi it erasi di at as. I ni dapat dit et apkan sebagai sebuah EL expression.

  • VarSt at us – ( t am bahan) . Menj elaskan nam a variabel yang akan diakses oleh body loop unt uk m endapat kan inform asi pada st at us loop t erbaru. Nilai ini t idak dapat dievaluasi pada saat runt i
  • Begin – ( t am bahan) . Sebuah nilai int eger yang m enj elaskan indeks yang akan digunakan

  sebagai t it ik awal it erasi. Jika nilai ini t idak disediakan, indeks it erasi akan dim ulai pada nilai 0, sebagai perm ulaan collect ion. Bisa m erupakan suat u expression runt im e.

  • End – ( t am bahan) . Sebuah nilai int eger yang m enj elaskan indeks unt uk m enent ukan t it ik akhir dari it erasi. Jika t idak dit et apkan nilainya, it erasi akan berlanj ut hingga elem en t erakhir t erca
  • St ep – Sebuah nilai int eger yang m enj elaskan ukuran langkah unt uk digunakan ket ika

  it erasi berj alan. Sebagai cont oh, m engat ur nilai ini dengan angka dua berart i t idak sem ua elem en akan diakses. Hal ini berart i pada elem en 3 akan diakses set elah set iap 2 elem en t erlebih dahulu. Suat u penggunaan yang um um dari t ag ini adalah unt uk m engulang hasil di at as dit unj ukkan di suat u t em pat dalam sebuah aplikasi ( biasanya sebuah servlet ) . Mari kit a am bil sebuah cont oh dari skenario berikut : Kit a m em iliki sebuah m odul aplikasi yang m enerim a dari det ail dat abase user yang t erm asuk child dari kat egori pencarian. Um um nya, Kit a ingin m enam pilk an logika akses dat abase dari sebuah servlet dan m enyam paikan dat a kepada sebuah JSP unt uk present asi. Dibawah ini adalah kode snippet dari sebuah servlet yang akan m enangani akses.

  ... // me-load parameter ke dalam Map Map parameters = loadUserParameters(); UserDataService service = new UserDataService(); // Menampilkan pencarian database dan menyimpan hasilnya di dalam sebuah Collection Collection results = service.searchUsers(parameters); // Menyimpan hasil untuk akses berikutnya request.setAttribute("searchResults", results); // Melanjutkan permintaan ke JSP untuk ditampilkan request.getRequestDispatcher("/results.jsp").forward(request, response); ...

  Dan ini adalah sebuah halam an JSP yang sederhana yang bert anggung j awab unt uk m enam pilkan hasil. Mari Kit a asum sikan bahwa isi collect ion adalah inst ans dari obj ect User dim ana m em iliki nam a dan alam at yang diat ur sebagai propert ies St ring yang dapat diakses via publik m et hod get .

  <

  

  uri="

  

  " prefix="c" %> <H1>The following users met your search criteria : </H1> <br/> <c:forEach var="user" items="${requestScope.searchResults}"> <li> ${user.name} - ${user.address} </c:forEach> Dalam halam an JSP, Kit a m enggunakan t ag forEach unt uk m engulangi hasil pencarian diat as. Kit a dapat m elakukan ini dengan m enunj uk t ag forEach kepada inst ans Collect ion yang disim pan dalam scope perm int aan m enggunakan EL. Kem udian Kit a m enunj ukkan set iap elem en dalam Collect ion m enggunakan variabel user yang t elah Kit a definisikan di dalam at ribut var, dan m enggunakan EL unt uk m enam pilkan nilai.

  Jelas sekali bahwa versi JSTL j auh lebih dapat dim engert i, khususnya kepada desainer sit us t anpa penget ahuan Java. < c: forTokens> I t erasi t ag yang disediakan oleh JSTL adalah t ag < forTokens> . Tag ini berbent uk St ring dan m erubah m ereka m enj adi t oken berdasar pada delim it er yang diberikan. Sem ua at ribut t ag forEach dibagi bersam a oleh t ag ini. Terkecuali m ereka, at ribut yang berikut dit am bahkan :

  Bandingkan kepada apa yang akan t erlihat sepert i t anpa JSTL : <H1>The following users met your search criteria : </H1> <br/> <% Collection results = (Collection) request.getAttribute("searchResults"); Iterator iter = results.iterator(); while (iter.hasNext()) { User user = (User) iter.next(); %> <li> <%= user.getName() %> - <%= user.getAddress() %> <% } %>

  • Delim s – m enj elaskan delim it er unt uk digunakan ket ika m erubah t arget dari St ring m enj adi t okens.

  At ribut it em sekarang t elah m em iliki sebuah t uj uan baru unt uk t ag ini. At ribut t ersebut m enggam barkan St ring yang akan di t okenized. Sebuah cont oh diberikan dibawah ini :

  < " prefix="c" %> ... <c:forTokens items="item1,item2,item3,item4" delims="," var="item"> <li> ${item} </c:forTokens>

  6 .2 .1 1 Kon disi

  Sat u set t ag dibawah kat egori ini m eniru fungsi yang disediakan oleh st andard pernyat aan if, else- if,... yang dapat dit em ukan dalam st andard Java. Pem akaian dari t ag pernyat aan st andard Java diat as t ert uj u kepada kode pem bersih; dapat berpindah dari script ing server- side ke out put norm al HTML dan kem udian sesekali m em buat dim ungkinkan sebuah kondisi dengan script let yang susah unt uk dim engert i dan diat ur. Ada dua set ut am a condit ionals : t ag < c: if> m eniru sebuah pernyat aan if Java sederehana; dan t ag < c: choose> berhubungan selalu deng t ag < c: when> dan < c: ot herwise> , dim ana kesem uanya m eniru pernyat aan fungsi swit ch. < c: if> Tag < c: if> m engij inkan eksekusi isi yang t erdapat di dalam body- nya j ika nilai expression yang dievaluasi dalam at ribut t est bernilai t rue. Jika expression dievaluasi m enj adi false, m aka body t idak akan pernah dieksekusi. Cont oh :

  <c:if test="${empty sessionScope.user}"> You are not currently logged in! Please correct before continuing any further. </c:if>

  < c: choose> , < c: when> , < c: ot herwise> Ket iga t ag bekerj a bersam a unt uk m enyediakan fungsi swit ch dalam aplikasi Kit a. Pada dasarnya, sat u at au lebih ket ika t ag dilet akkan dalam body dari t ag choose. Tag choose m engevaluasi set iap at ribut t est dari t ag when dan m engeksekusi body dari t ag when dim ana m engevaluasi m enj adi benar. Jika t idak ada t ag when yang berhasil cocok, choose m em anggil t ag ot herwise, j ika dim asukkan. Cont oh :

  <c:choose> <c:when test="${userGrade >95}"> Outstanding! </c:when> <c:when test="${userGrade > 80}"> Good! </c:when> <c:when test="${userGrade < 60}"> Failed! </c:when> <c:otherwise> Congratulations ...

  </c:otherwise> </c:choose>