SlideShare a Scribd company logo
1 of 14
Download to read offline
J.E.N.I




                                  BAB 8
                         Advanced MVC

8.1 Pendahuluan
Pada pembahasan sebelumnya, kita telah memahami garis besar dasar dari Struts.
Kita telah mempelajari bagaimana cara mengimplementasikan framework Struts
pada aplikasi dengan mengkonfigurasi ActionServlet yang disediakan untuk
menangani request. Kita juga telah mempelajari cara untuk membuat instance dari
Action classes yang berfungsi sebagai action handlers pada penyerahan form dan
user request yang lain. Telah diketahui cara pembuatan ActionForm classes yang
menyediakan cara mudah transfer data dari form menuju ActionHandlers yang
dibuat. Terakhir, telah diketahui pula mengenai penggunaan tag library untuk
menggabungkan form HTML dalam halaman JSP pada framework.

Pada bab ini, kita akan membahas beberapa teknik dan fitur terapan dari Struts
framework. Pertama, akan kita pelajari mengenai penggunaan DynaActionForms
untuk mengurangi jumlah class yang kita gunakan dalam framework. Kemudian,
akan kita telusuri bagaimana framework validator berfungsi dalam hal validasi baik
pada server-side maupun client-side. Terakhir, akan dikenalkan Tiles framework,
yang memiliki fitur presentationlayer yang lebih kompleks, sehingga dapat membuat
templating machine terhadap halaman – halaman yang ada pada aplikasi.




8.2 DynaActionForms
Pada aplikasi skala besar utamanya, jumlah class yang perlu untuk dibuat dan
dipergunakan dapat begitu tinggi. Struts mendukung classes yang cukup membantu
hal ini, terutama dalam hubungannya dengan ActionForms, yang mempersyaratkan
solidnya implementasi form keseluruhan pada aplikasi. Banyak dari developer yang
terjebak pada batasan ini, utamanya pada saat ActionForms adalah berupa
JavaBeans sederhana yang memiliki method get dan set pada tiap form fields pada
representasinya.

Strus memiliki penyelesaian atas permasalahan tersebut pada versi 1.1, disebut
dengan DynaActionForms. DynaActionForms sangat mirip dengan ActionForms,
sehingga sebuah instance darinya dapat diambil dan method dipanggil pada saat
ActionHandlers memerlukan data yang ada. Perbedaan utamanya adalah, tiap
DynaActionForm tidak terdeklarasi sebagai class terpisah, melainkan terkonfigurasi
dalam struts-config.xml.




Advanced MVC                                                                1
J.E.N.I



Dibawah ini adalah contoh konfigurasi dan deklarasi DynaActionForms. Kita gunakan
sesuai contoh pada bab sebelumnya, disini dibuat sebuah ActionForm yang akan
menangani data yang dibutuhkan pada saat log in.



  <?xml version=”1.0”?>
  <!DOCTYPE struts-config PUBLIC “-//Apache Software Foundation//DTD Struts
  Configuration 1.1//EN” “http://jakarta.apache.org/struts/dtds/struts-
  config_1_1.dtd” >
  <struts-config>
         <form-beans>
                <form-bean
                       name=”loginForm”
                       type="org.apache.struts.action.DynaActionForm">
                       <form-property name=”loginName” type=”java.lang.String”/>
                       <form-property name=”password” type=”java.lang.String”/>
                </form-bean>
         </form-beans>
         <action-mappings>
                <action name=”loginForm”
                       path=”/login”
                       scope=”request”
                       type=”login.LoginAction”>
                       <forward name=”success” path=”/success.jsp”/>
                       <forward name=”failure” path=”/failure.jsp”/>
                </action>
         </action-mappings>
  </struts-config>




Seperti yang terlihat, pembuatan DynaActionForm berlangsung dengan amat
sederhana, dan pada beberapa kasus, deklarasi DynaActionForm dalam file
konfigurasi lebih sederhana dan cepat dibandingkan dengan menuliskan instance
ActionForm secara langsung. Kita tidak perlu memperhatikan form properties serta
membuat method get dan set pada setiap ActionForm, dengan menggunakan
DynaActionForm hanya memerlukan deklarasi property name dan type.

Berikut ini adalah Java types yang didukung oleh DynaActionForm :
   o java.lang.bigDecimal
   o java.lang.bigInteger
   o boolean dan java.lang.Boolean
   o char dan java.lang.Character
   o double dan java.lang.Double
   o float dan java.lang.Float
   o int dan java.lang.Integer
   o long dan java.lang.Long
   o short dan java.lang.Short
   o java.lang.String
   o java.lang.Date
   o java.lant.Time
   o java.sql.TimeStamp




Advanced MVC                                                                2
J.E.N.I




8.3 Validators
Validasi input sangat dibutuhkan dalam aplikasi berbasis web. Dengan menggunakan
validasi input, didapatkan koreksi atas format dan isi dari input yang diberikan user.
Dalam banyak kasus, seorang user tidak selalu memasukkan input yang benar, huruf
dapat dimasukkan dalam field numerik dan sebaliknya; sebuah field yang
mempersyaratkan minimal 3 digit hanya diisikan dengan2 digit, dan sebagainya.
Adalah tanggung jawab dari aplikasi untuk waspada dan menangani kesalahan input
disamping kesalahan hasil dari proses business logic (password tidak cocok dan
sebagainya).

Struts meringankan kesulitan yang dihadapi developer dalam menjalankan validasi
dengan menyediakan validasi framework yang disebut dengan Validator Framework.
Penggunaan framework ini memiliki beberapa kelebihan :


    o     Framework menyediakan beberapa aturan validasi. Terdapat beberapa
          rangkaian pemeriksaan umum pada aplikasi seperti pemeriksaan format,
          panjang karakter dan sebagainya. Framework ini menyediakan komponen –
          komponen yang dibutuhkan sehingga developer tidak lagi membuat kode
          yang akan melakukan proses validasi. Komponen yang disediakan umumnya
          cukup mewakili proses validasi global, namun proses validasi lain juga dapat
          dibuat.


    o     Mengurangi redudansi kode. Framewok memisahkan komponen yang
          melakukan validasi dengan komponen yang memerlukan validasi. Hal ini juga
          membuat developer dalam penggunaan ulang kode dengan lebih mudah :
          komponen yang memerlukan validasi cukup mendeklarasikan jenis validasi
          yang diinginkan disamping menambahkan kode validasi pada komponen
          tersebut.

    o     Satu titik maintenance. Developer tidak lagi menelusuri aplikasi secara
          menyeluruh untuk memeriksa aturan validasi yang terdapat pada bermacam
          komponen. Seluruh aturan dideklarasikan pada file konfigurasi yang diberikan
          oleh framework.


Terdapat beberapa langkah yang dibutuhkan dalam menambahkan fungsi – fungsi
validator dalam aplikasi Struts :
    o Konfigurasi Validator Plug-in
    o Deklarasi form yang memerlukan validasi, dan tipe validasi yang dibutuhkan
    o Membuat pesan yang akan ditampilkan jika proses validasi mengalami
       kegagalan
    o Merubah base class dari ActionForms menjadi ValidatorForm pada aplikasi.
       Dan juga merubah tipe dari DynaActionForms menjadi DynaValidatorForm




Advanced MVC                                                                    3
J.E.N.I



8.3.1 Konfigurasi Validator Plug-in

Langkah ini diperlukan untuk membuat Struts framework mengetahui penggunaan
Validator framework. Hal yang perlu dilakukan adalah menambahkan beberapa baris
kode dalam struts-config.xml. Berikut ini contohnya :


  ...
                  <forward name=”success” path=”/success.jsp”/>
                  <forward name=”failure” path=”/failure.jsp”/>
                  </action>
           </action-mappings>

           <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
                  <set-property
                  property="pathnames"
                  value="/WEB-INF/validator-rules.xml, /WEB-INF/validation.xml"/>
           </plug-in>

  </struts-config>




Path names property menginformasikan pada framework dimana letak untuk
menemukan file konfigurasi yang diperlukan. Terdapat beberapa file konfigurasi :
validator-rules.xml dan validator.xml.


8.3.2 validator-rules.xml

File konfigurasi ini mendefinisikan classes yang mengimplementasi kode validasi.
Framework menyertakan file ini dengan validator classes yang telah didefinisikan
sebelumnya.

Dibawah ini adalah daftar logical names dari validators yang disertakan dalam
framework :

    o     required – properties yang diberi tanda sebagai required harus memiliki
          minimal satu karakter disamping spasi
    o     mask – properties dengan mask validator harus sesuai dengan format
          penulisan yang dicantumkan pada validator dengan menggunakan mask
          variable
    o     minlength – property tersebut harus memiliki panjang minimal sama atau
          lebih dari min variable yang diberikan
    o     maxlength – property tersebut harus memiliki panjang yang sama atau
          kurang dari max variable yang diberikan
    o     range – property memiliki panjang dalam area antara max dan min value
          yang diberikan
    o     byte, short, integer, long, float, double – property harus sesuai dengan
          tipe primitive yang diberikan
    o     date – validasi sukses jika value dari property berupa tanggal yang valid
    o     creditCard – validasi berhasil bila value dari property adalah format nomor
          kartu kredit yang valid


Advanced MVC                                                                   4
J.E.N.I



    o     email – validasi berhasil jika value dari property tersebut format email yang
          benar



8.3.3 validation-xml

File konfigurasi ini menginformasikan pada framework form apa saja yang
membutuhkan validasi dan aturan validasi apa yang akan diimplementasikan.
Framework ini hanya menyediakan struktur dari file. Developer harus
mengkonfigurasi sendiri file ini untuk membantu fungsionalitas framework.


8.3.3.1         Menkonfigurasi file validation.xml

Sekali lagi, kita akan mempelajari elemen yang dibutuhkan oleh file konfigurasi pada
contoh. Dibawah ini adalah potongan yang akan terlihat dari file jika kita akan
mengkonfigurasi form login terlebih dahulu.



  <formset>
         <form name=”loginForm”>
                <field property=”loginName” depends=”required”>
                       <arg0 key=”error.loginname.required”/>
                </field>

                <field property=”password” depends=”required,minlength”/>
                       <arg0 key=”error.password.required”/>
                       <var>
                              <var-name>min</var-name>
                              <var-value>4</var-value>
                       </var>
                </field>
         </form>
  </formset>




Berikut adalah macam elemen yang terdapat pada file XML ini.

<formset>
Elemen ini berfungsi sebagai container untuk elemen – elemen pada form


<form>
Setiap form dalam aplikasi yang memerlukan proses validasi harus memiliki <form>
elemen yang berhubungan. Atribut name pada hal ini harus sesuai dengan name dari
form-bean yang dikonfigurasi pada struts-config.xml. Elemen ini dapat mengandung
satu atau lebih elemen <field>.




Advanced MVC                                                                     5
J.E.N.I




<field>
Tiap elemen field merepresentasikan sebuah property pada form yang memerlukan
validasi. Elemen ini memiliki atribut – atribut sebagai berikut :

    o     property – nama dari property dalam form yang akan divalidasi
    o     depends – daftar validator yang dipisahkan dengan tanda koma yang
          kemudaian akan diaplikasikan pada property. Nama dari validator
          didefinisikan dalam validator-rules.xml.


<arg0>
Mendefinisikan key pada error message yang akan ditampilkan jika property gagal
dalam proses validasi. Key dan error message yang akan ditampilkan dapat
ditemukan pada resource bundle yang dibuat oleh developer.

<var>
Tiap elemen var mendefinisikan sebuah variabel dengan value masing – masing yang
akan diteruskan menuju validator. Nama dari variabel didefinisikan dengan elemen
turunan <var-name>, sedangkan isi value-nya didefinisikan menggunakan elemen
turunan <var-value>.


Telah dijelaskan di atas informasi – informasi tentang bermacam elemen pada file
konfigurasi, dapat dikatakan bahwa contoh tersebut mengkonfigurasi form login
aplikasi Struts sehingga loginName dan password field harus memiliki value yang
dimasukkan. Sebagai tambahan, password field harus memiliki panjang minimal 4
karakter untuk melewati proses validasi.



8.3.3.2        Mendefinisikan resource bundle

Elemen <arg0> di atas mendefinisikan sebuah key yang perlu dicocokkan dengan
sebuah entry pada resource bundle. Entry tersebut kemudian digunakan untuk
menentukan pesan yang akan ditampilkan pada user. Validator framework
menggunakan resource bundle yang juga digunakan oleh Struts framework, dimana
pada kondisi default, dapat ditemukan pada direktori WEB-INF/classes dengan nama
ApplicationResources.properties. Jika file resource bundle tersebut tidak ditemukan
pada aplikasi, maka buatlah sebuah text file dengan nama yang sama.

Entry pada resource bundle adalah pasangan sederhana berupa key=value. Pada
konfigurasi file diatas, kita dapatkan isi file sebagai berikut :

 error.loginname.required=Masukkan nama anda
 error.password.required=Anda belum mengisi password atau password kurang dari
 4 karakter




Advanced MVC                                                                 6
J.E.N.I



Langkah terakhir dalam menggunakan validation framework adalah mengubah
ActionForm dan DynaActionForm classes untuk memakai classes yang disediakan.
Gunakan DynaActionForm pada contoh sebelumnya :


  <?xml version=”1.0”?>
  <!DOCTYPE struts-config PUBLIC “-//Apache Software Foundation//DTD Struts Configuration
  1.1//EN” “http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd” >
          <struts-config>
                  <form-beans>
                          <form-bean
                                  name=”loginForm”
                                  type="org.apache.struts.validator.DynaValidatorForm">
                                  <form-property name=”loginName” type=”java.lang.String”/>
                                  <form-property name=”password” type=”java.lang.String”/>
                          </form-bean>
          </form-beans>
          <action-mappings>
                  <action name=”loginForm”
                  path=”/login”
                          scope=”request”
                          type=”login.LoginAction”
                          validation=”true”>
                  <forward name=”success” path=”/success.jsp”/>
                  <forward name=”failure” path=”/failure.jsp”/>
          </action>
          </action-mappings>
  </struts-config>




8.4 Tiles

Framework lain yang bekerja dengan Struts adalah Tiles framework. Dengan
menggunakan Tiles, kita dapat mendefinisikan templates dan screen instances yang
dapat digunakan dalam aplikasi dengan mudah.


Apakah templates itu?

Secara ringkas, sebuah halaman template adalah desain layout halaman yang dapat
digunakan kembali oleh halaman apapun pada aplikasi. Penggunaan templates
membuat aplikasi terlihat lebih konsisten.

Untuk lebih memahami konsep templates, mari kita perhatikan beberapa halaman
dari aplikasi web :


HALAMAN DARI SITUS TERPERCAYA

Seperti terlihat pada halaman – halaman tersebut, terdapat beberapa elemen desain
yang dipakai. Secara keseluruhan menggunakan rangkaian navigational links yang
sama pada bagian kiri dan rangkaian gambar pada bagian atas, serta bagian yang
berubah antara halaman yang berbeda adalah bagian tengah halaman.




Advanced MVC                                                                          7
J.E.N.I



Pertimbangkan bagaimana cara kita untuk mengimplementasikan beberapa halaman
yang sama. Jika kita implementasikan pada setiap halaman seperti yang terlihat,
dalam hal ini tepat satu halaman yang berhubungan dengan halaman-halaman yang
terlihat pada gambar, pada nantinya kita akan mengalami kesulitan pada saat
melakukan proses maintenance. Hal itu dikarenakan oleh banyaknya duplikasi kode
yang akan digunakan, jika pada suatu saat seseorang memutuskan bahwa gambar
pada halaman tidak terlihat bagus, ataupun navigational menu pada bagian kiri tidak
terlalu menarik, perubahan akan dilakukan terhadap seluruh halaman yang ada.

Seorang programmer mengetahui bahwa pembagian area kode dapat diduplikasikan
pada seluruh halaman aplikasi. Konsep ini juga dapat diterapkan pada halaman
JSP/HTML : navigational links dapat berupa satu halaman tersendiri, header images
sebagai halaman lain, begitu pula dengan footer. Halaman – halaman ini kemudian
dapat digunakan pada halaman dengan isi body. Hal ini dapat dilakukan tanpa
menggunakan framework apapun, cukup menggunakan <jsp:include> action yang
telah dibahas sebelumnya pada bagian dasar JSP.

Terdapat penyelesaian yang lebih baik, yaitu dengan membuat bagian body sebagai
halaman bagian JSP tersendiri, kemudian membuat sebuah halaman JSP lain yang
akan berfungsi sebagai default format dan layout dari halaman halaman yang ada.
Seorang developer kemudian akan mengimplementasikannya dengan cara
memasukkan halaman yang berisi body content dalam template tersebut.

Terlihat jelas kelebihan dari cara diatas : segala keperluan perubahan hanya akan
dilakukan pada satu aspek pada presentation layer, sebagai contoh header, akan
diterapkan pada seluruh halaman aplikasi hanya dengan memodifikasi satu halaman.
Jika anda ingin mengganti layout dari aplikasi, disamping mengerjakan content dari
aplikasi, cukup dilakukan dengan mengubah halaman template yang digunakan
sebelumnya.


Berikutnya akan dibahas mengenai implementasi template menggunakan Tiles
Framework :


8.4.1 Mempersiapkan Tiles

Sebelum menggunakan Tiles       framework,   perlu   dilakukan   beberapa   langkah
persiapan sebagai berikut :

1. Menambahkan beberapa baris kode berikut pada struts-config.xml sebelum tag
   penutup </struts-config>

      <plug-in className="org.apache.struts.tiles.TilesPlugin" >
             <set-property
                    property="definitions-config"
                    value="/WEB-INF/tiles-defs.xml" />
      </plug-in>




Advanced MVC                                                                  8
J.E.N.I



    Kode ini menginformasikan pada Struts bahwa aplikasi akan menggunakan
    TilesFramework dan file konfigurasinya diletakkan pada direktori /WEB-INF
    dengan nama tiles-defs.xml

2. Langkah berikutnya, salin file struts-tiles.tld dan tiles-config.dtd dari direktori
   library Struts menuju direktori /WEB-INF. File pertama berisi macam – macam
   tags yang dibutuhkan dalam penggunaan Tiles, sedangkan file kedua berisi
   struktur file konfigurasi dari tiles-defs.

3. Buat sebuah file konfigurasi kosong yang akan diisi kemudian. Buat sebuah file
   XML pada direktori /WEB-INF. kemudian beri nama dengan tiles-defs.xml. Isi file
   tersebut dengan kode sebagai berikut :


      <!DOCTYPE tiles-definitions PUBLIC
             "-//Apache Software Foundation//DTD Tiles Configuration//EN"
             "http://jakarta.apache.org/struts/dtds/tiles-config.dtd">

      <tiles-definitions>

      </tiles-definitions>



Jika langkah – langkah tersebut telah dijalankan seluruhnya, maka Tiles Framework
siap digunakan.



8.4.2 Membuat Layout Template

Langkah pertama dalam pembuatan sebuah template adalah mengidentifikasi
komponen yang akan ditempatkan. Sebagai contoh, sebagai besar halaman web
memiliki komponen header, footer, menu bar dan body.

Berikut ini rancang diagram dasar template yang akan dibuat :


                                       Header




                             Menu
                                           Body
                              Bar




                                       Footer




Advanced MVC                                                                    9
J.E.N.I



Untuk membuat sebuah halaman template yang menerapkan layout tersebut, ikuti
langkah – langkah berikut ini :

    1. Buat sebuah halaman JSP baru
    2. Import tag library dari Tiles
    3. Buat file HTML yang menerapkan layout tersebut, biarkan kosong pada bagian
       elemen yang digunakan
    4. Gunakan tag <tiles:insert> yang berfungsi sebagai penentu letak dari
       komponen layout

Halaman HTML yang menerapkan layout tersebut memiliki bentuk sesederhana
tabel, dengan komponen sebagai elemen tabel seperti terlihat pada halaman JSP di
bawah ini :

  <%@ taglib uri="http://jakarta.apache.org/struts/tags-tiles" prefix="tiles"
  %>
  <HTML>
  <HEAD>
         <TITLE><tiles:getAsString name="title"/></TITLE>
  </HEAD>
  <BODY>
  <TABLE border="0" width="100%" cellspacing="5">

  <TR>
           <TD colspan="2"><tiles:insert attribute="header"/></TD>
  </TR>
  <TR>
           <TD width="140" valign="top">
           <tiles:insert attribute="menu"/>
           </TD>
           <TD valign="top" align="left">
           <tiles:insert attribute="body"/>
           </TD>
  </TR>
  <TR>
           <TD colspan="2">
           <tiles:insert attribute="footer" />
           </TD>
  </TR>
  </TABLE>
  </BODY>
  </HTML>




Terdapat dua macam tag pada contoh yang diberikan diatas : <tiles:insert> dan
<tiles:getAsString>.

    o     <tiles:insert> - tag ini cukup sering digunakan pada Tiles Framework. Dalam
          hal ini berfungsi untuk memasukkan bagian JSP yang direferensikan dengan
          nama yang terisi pada atribut attribute.

    o     <tiles:getAsString> - tag ini berfungsi menampung value yang diisikan pada
          komponen dengan atribut name sebagai String.




Advanced MVC                                                                   10
J.E.N.I



8.4.3 Membuat Screen Definitions

Setelah memuat sebuah template, kita dapat menggunakannya untuk
mendefinisikan sebuah screen. Pembuatan screen definition dapat dilakukan dalam
dua cara dalam Tiles framework : didefinisikan dalam halaman JSP, atau dalam file
XML yang dikenali oleh framework.


Membuat sebuah definition menggunakan halaman JSP :

Pembuatan definition dalam halaman JSP menerapkan banyak macam tag yang
disertakan oleh Tiles Framework :
    o <tiles:definition> - tag dasar yang digunakan untuk mendefinisikan layer.
       Value dari attribute id adalah nama yang terhubung dengan komponen lain.
       Value dari page attribute adalah lokasi dimana template file tersebut berasal.

    o     <tiles:put> - tag ini digunakan untuk menempatkan sebuah value ke dalam
          sebuah attribute dalam template. Name attribute adalah nama dari lokasi
          target dalam template, sedangkan value mendefinisikan lokasi dari fragmen
          JSP yang akan digunakan.


Perhatikan contoh dibawah ini :

  <%@ taglib uri="http://jakarta.apache.org/struts/tags-tiles" prefix="tiles"
  %>
  <tiles:definition id="welcomePage" page="/layout/basicLayout.jsp">
         <tiles:put name="title" value="Welcome!"/>
         <tiles:put name="header" value="/header.jsp"/>
         <tiles:put name="footer" value="/footer.jsp"/>
         <tiles:put name="menu" value="/menu.jsp"/>
         <tiles:put name="body" value="/welcome.jsp"/>
  </tiles:definition>




Pada contoh tersebut, kita membuat sebuah screen definition untuk halaman utama,
yaitu halaman muka aplikasi. Halaman tersebut menggunakan layout yang
didefinisikan pada daftar, dan menempatkan komponen title, header, footer, menu
dan body pada lokasi yang ditentukan pada template.

Secara default, definition ini hanya terlihat pada halaman JSP yang memiliki
deklarasi definition terkait. Untuk mengubahnya, kita dapat menambahkan sebuah
value kedalam atribut opsional scope pada tag <tiles:definition>. Values pada
atribut tersebut mencakup : page, request, session dan application.




Advanced MVC                                                                   11
J.E.N.I



8.4.4 Membuat definition menggunakan konfigurasi file XML

Cara kedua untuk membuat screen definitions adalah mencantumkan konfigurasi
pada file tiles-defs.xml. Syntax penulisan konfigurasi tersebut sangat mirip dengan
tag <tiles:definition> yang digunakan sebelumnya :


  <!DOCTYPE tiles-definitions PUBLIC
         "-//Apache Software Foundation//DTD Tiles Configuration 1.1//EN"
         "http://jakarta.apache.org/struts/dtds/tiles-config_1_1.dtd">
  <tiles-definitions>
         <definition name="welcomePage" page="/layout/basicLayout.jsp">
                <put name="title" value="Welcome!"/>
                <put name="header" value="/header.jsp"/>
                <put name="footer" value="/footer.jsp"/>
                <put name="menu" value="/menu.jsp"/>
                <put name="body" value="/welcome.jsp"/>
         </definition>
         <!-- ... more definitions ... -->
  </tiles-definitions>




Apakah perbedaan antara dua cara tersebut? Kedua cara menyimpan definition
sebagai JavaBean ke dalam memory. Method pada JSP me-load definition setelah
fragmen JSP yang berisi definition tersebut telah diakses, dan secara default,
membuatnya terlihat hanya pada halaman yang sama. Kondisi ini membuat
penggunaan ulang dari screen definition pada aplikasi sedikit lebih sulit, dibutuhkan
perhatian ekstra untuk menghindari loading dan loading definition yang tidak penting
terhadap memory.

Dilain pihak, XML method membuat screen definition dapat            digunakan oleh
keseluruhan aplikasi secara langsung setelah startup aplikasi.      Tiles framework
membuatnya permanen dalam memory. Satu-satunya hal yang              diperlukan oleh
komponen untuk menggunakannya adalah dengan memasukkan               nama definition
tersebut.

Kelebihan lain dari penggunaan XML method dalam pembuatan screen definition
adalah definition itu sendiri dapat digunakan sebagai ActionForwards oleh Struts
framework. Hal ini dapat mengurangi secara drastic halaman JSP yang dibutuhkan
oleh aplikasi. Menggunakan definition sebagai ActionForwards merupakan pokok
pembahasan yang akan dibahas lebih detail selanjutnya.




Advanced MVC                                                                   12
J.E.N.I



8.4.5 Menggunakan Screen Definitions

Membuat sebuah screen definition belum cukup untuk ditampilkan pada user.
Supaya sebuah definition dapat dipakai, gunakan tag <tiles:insert> dan isikan nama
definition yang akan ditampilkan :

  <%@ taglib uri="http://jakarta.apache.org/struts/tags-tiles" prefix="tiles" %>
  <tiles:insert beanName="welcomePage" flush="true"/>




Salah satu permasalahan dengan pendekatan ini adalah meningkatkan jumlah
halaman JSP yang dibutuhkan untuk menampilkan layer yang berbeda pada user,
disamping komponen body content, tiap screen membutuhkan halaman terpisah
yang akan menggunakan screen definition. Untuk sebuah aplikasi yang
membutuhkan 100 screen atau lebih, jumlah halaman yang dibutuhkan akan berlipat
ganda.

Pendekatan yang lebih baik adalah dengan menggunakan definition sebagai target
dari ActionForward. Dengan menambahkan Tiles framework sebagai plugin pada
Struts, Struts mengetahui screen definitions yang dibuat dengan menggunakan Tiles.
Screen names berfungsi sebagai penentu lokasi pada tag <forward>. Perhatikan
contoh di bawah ini :


  <action-mappings>
         <action name=”loginForm”
                path=”/login”
                scope=”request”
                type=”login.LoginAction”
                validation=”true”>
         <forward name=”success” path=”/welcomePage”/>
         <forward name=”failure” path=”/failure.jsp”/>
         </action>
  </action-mappings>




Disini kita melakukan modifikasi atas contoh dari struts-config.xml sebelumnya,
sehingga pada situasi dengan kondisi success dipetakan pada definition
welcomePage. Seperti yang terlihat, pendekatan ini cukup sederhana, mudah
digunakan, dan mengurangi jumlah halaman JSP yang harus dibuat.



8.4.6 Menambahkan Definitions

Salah satu kekuatan dari Tiles framework dari templating method lain adalah
mengijinkan extensions pada screen definitions. Screen extensions bekerja dengan
cara yang sama dengan inheritance class pada Java : extended screen menurunkan
seluruh properties dan attributes dari parent Definition. Hal ini mengijinkan kita
untuk membuat sebuah definition dasar yang mendeklarasikan values untuk attribut
yang diextend oleh definitions terutama pada halaman – halaman tertentu.




Advanced MVC                                                                       13
J.E.N.I



Perhatikan contoh dibawah ini :

  <definition name="basicDefinition" page="/layout/basicLayout.jsp">
         <put name="header" value="/header.jsp"/>
         <put name="footer" value="/footer.jsp"/>
         <put name="menu" value="/menu.jsp"/>
  </definition>

  <definition name="welcomePage" extends="basicDefinition">
         <put name="title" value="Welcome!"/>
         <put name="body" value="/welcome.jsp"/>
  </definition>

  <definition name="otherPage" extends="basicDefinition">
  <put name="title" value="My title"/>
  <put name="body" value="/otherContent.jsp"/>
  </definition>




Dengan pembuatan sebuah base screen yang kemudian dapat di extend, kita
menghindari penulisan ulang pada definisi value attribute. Dan juga, jika diperlukan
perubahan dalam sebuah komponen yang terdapat pada base attributes, perubahan
tersebut dapat dengan cepat diterapkan pada seluruh screen secara otomatis dengn
memodifikasi base screen definitions.




Advanced MVC                                                                  14

More Related Content

Viewers also liked

&lt;img src="../i/r_14.png" />
&lt;img src="../i/r_14.png" />&lt;img src="../i/r_14.png" />
&lt;img src="../i/r_14.png" />
tutorialsruby
 
Jeni Intro1 Bab12 Dasar Exception Handling
Jeni Intro1 Bab12 Dasar Exception HandlingJeni Intro1 Bab12 Dasar Exception Handling
Jeni Intro1 Bab12 Dasar Exception Handling
Individual Consultants
 
Jeni J2 Me Bab01 Pengembangan Aplikasi Mobile
Jeni J2 Me Bab01 Pengembangan Aplikasi MobileJeni J2 Me Bab01 Pengembangan Aplikasi Mobile
Jeni J2 Me Bab01 Pengembangan Aplikasi Mobile
Individual Consultants
 
Людмила Зайцева, РГБ
Людмила Зайцева, РГБЛюдмила Зайцева, РГБ
Людмила Зайцева, РГБ
Елена
 
wexarts.org iPhone Project: Developer Documentation
wexarts.org iPhone Project: Developer Documentationwexarts.org iPhone Project: Developer Documentation
wexarts.org iPhone Project: Developer Documentation
tutorialsruby
 
Demo-BW_Tutorial-USPG_%20Ed_1-3
Demo-BW_Tutorial-USPG_%20Ed_1-3Demo-BW_Tutorial-USPG_%20Ed_1-3
Demo-BW_Tutorial-USPG_%20Ed_1-3
tutorialsruby
 
Jeni Intro1 Bab01 Pengenalan Pemrograman Komputer
Jeni Intro1 Bab01 Pengenalan Pemrograman KomputerJeni Intro1 Bab01 Pengenalan Pemrograman Komputer
Jeni Intro1 Bab01 Pengenalan Pemrograman Komputer
Individual Consultants
 
Jeni Intro1 Bab09 Bekerja Dengan Java Class Library
Jeni Intro1 Bab09 Bekerja Dengan Java Class LibraryJeni Intro1 Bab09 Bekerja Dengan Java Class Library
Jeni Intro1 Bab09 Bekerja Dengan Java Class Library
Individual Consultants
 

Viewers also liked (20)

&lt;img src="../i/r_14.png" />
&lt;img src="../i/r_14.png" />&lt;img src="../i/r_14.png" />
&lt;img src="../i/r_14.png" />
 
Jeni Intro1 Bab12 Dasar Exception Handling
Jeni Intro1 Bab12 Dasar Exception HandlingJeni Intro1 Bab12 Dasar Exception Handling
Jeni Intro1 Bab12 Dasar Exception Handling
 
Jeni J2 Me Bab01 Pengembangan Aplikasi Mobile
Jeni J2 Me Bab01 Pengembangan Aplikasi MobileJeni J2 Me Bab01 Pengembangan Aplikasi Mobile
Jeni J2 Me Bab01 Pengembangan Aplikasi Mobile
 
Людмила Зайцева, РГБ
Людмила Зайцева, РГБЛюдмила Зайцева, РГБ
Людмила Зайцева, РГБ
 
Jeni J2 Me Bab11 Topik Topik Tambahan
Jeni J2 Me Bab11 Topik Topik TambahanJeni J2 Me Bab11 Topik Topik Tambahan
Jeni J2 Me Bab11 Topik Topik Tambahan
 
wexarts.org iPhone Project: Developer Documentation
wexarts.org iPhone Project: Developer Documentationwexarts.org iPhone Project: Developer Documentation
wexarts.org iPhone Project: Developer Documentation
 
cisco_cv
cisco_cvcisco_cv
cisco_cv
 
Presentatie Henk van Erp, Twinfield Masterclass
Presentatie Henk van Erp, Twinfield MasterclassPresentatie Henk van Erp, Twinfield Masterclass
Presentatie Henk van Erp, Twinfield Masterclass
 
Demo-BW_Tutorial-USPG_%20Ed_1-3
Demo-BW_Tutorial-USPG_%20Ed_1-3Demo-BW_Tutorial-USPG_%20Ed_1-3
Demo-BW_Tutorial-USPG_%20Ed_1-3
 
Eksamen tn transport projekt
Eksamen tn transport projektEksamen tn transport projekt
Eksamen tn transport projekt
 
Jeni J2 Me Bab07 Security
Jeni J2 Me Bab07 SecurityJeni J2 Me Bab07 Security
Jeni J2 Me Bab07 Security
 
RicoAjaxEngine
RicoAjaxEngineRicoAjaxEngine
RicoAjaxEngine
 
tutorial5
tutorial5tutorial5
tutorial5
 
Presentatie Albert Roos, Twinfield Masterclass
Presentatie Albert Roos, Twinfield MasterclassPresentatie Albert Roos, Twinfield Masterclass
Presentatie Albert Roos, Twinfield Masterclass
 
The_Perl_Review_0_6
The_Perl_Review_0_6The_Perl_Review_0_6
The_Perl_Review_0_6
 
Jeni Intro1 Bab01 Pengenalan Pemrograman Komputer
Jeni Intro1 Bab01 Pengenalan Pemrograman KomputerJeni Intro1 Bab01 Pengenalan Pemrograman Komputer
Jeni Intro1 Bab01 Pengenalan Pemrograman Komputer
 
AcroButtonsTutorial
AcroButtonsTutorialAcroButtonsTutorial
AcroButtonsTutorial
 
Jeni Intro1 Bab09 Bekerja Dengan Java Class Library
Jeni Intro1 Bab09 Bekerja Dengan Java Class LibraryJeni Intro1 Bab09 Bekerja Dengan Java Class Library
Jeni Intro1 Bab09 Bekerja Dengan Java Class Library
 
Jeni Intro2 Bab13 Pengenalan Generics
Jeni Intro2 Bab13 Pengenalan GenericsJeni Intro2 Bab13 Pengenalan Generics
Jeni Intro2 Bab13 Pengenalan Generics
 
Promoting growth through direct banking: anywhere, anytime, and device.
Promoting growth through direct banking: anywhere, anytime, and device.Promoting growth through direct banking: anywhere, anytime, and device.
Promoting growth through direct banking: anywhere, anytime, and device.
 

Similar to Jeni Web Programming Bab 8 Advanced Mvc

Resa ari siswo[1210652011], rico nilar hartono[1210652008]
Resa ari siswo[1210652011], rico nilar hartono[1210652008]Resa ari siswo[1210652011], rico nilar hartono[1210652008]
Resa ari siswo[1210652011], rico nilar hartono[1210652008]
resaarisiswo
 
Tugas resume aplinet (edi,vani,risky)
Tugas resume aplinet (edi,vani,risky)Tugas resume aplinet (edi,vani,risky)
Tugas resume aplinet (edi,vani,risky)
Koplak Koplakan
 
Tugas pbw 1310652044_1310652045
Tugas pbw 1310652044_1310652045Tugas pbw 1310652044_1310652045
Tugas pbw 1310652044_1310652045
Sugeng Nirwoto
 
Tugas pbw 1310652044_1310652045
Tugas pbw 1310652044_1310652045Tugas pbw 1310652044_1310652045
Tugas pbw 1310652044_1310652045
Sugeng Nirwoto
 
Tugas analisa faktor kualitas
Tugas analisa faktor kualitasTugas analisa faktor kualitas
Tugas analisa faktor kualitas
kamalbaktir
 
Membuat Project Web Service
Membuat Project Web ServiceMembuat Project Web Service
Membuat Project Web Service
Annisa Shabrina
 

Similar to Jeni Web Programming Bab 8 Advanced Mvc (20)

Form validation dengan code igniter
Form validation dengan code igniterForm validation dengan code igniter
Form validation dengan code igniter
 
Edwinprassetyo-1100631028-tugas1
Edwinprassetyo-1100631028-tugas1Edwinprassetyo-1100631028-tugas1
Edwinprassetyo-1100631028-tugas1
 
Frame work php
Frame work phpFrame work php
Frame work php
 
Resa ari siswo[1210652011], rico nilar hartono[1210652008]
Resa ari siswo[1210652011], rico nilar hartono[1210652008]Resa ari siswo[1210652011], rico nilar hartono[1210652008]
Resa ari siswo[1210652011], rico nilar hartono[1210652008]
 
Laporan tugas akhir daspro kelompok
Laporan tugas akhir daspro kelompok Laporan tugas akhir daspro kelompok
Laporan tugas akhir daspro kelompok
 
Tugas resume aplinet (edi,vani,risky)
Tugas resume aplinet (edi,vani,risky)Tugas resume aplinet (edi,vani,risky)
Tugas resume aplinet (edi,vani,risky)
 
Bab 4 perancangan sistem
Bab 4 perancangan sistemBab 4 perancangan sistem
Bab 4 perancangan sistem
 
Tutorial Aplikasi android client server menggunakan REST API Django
Tutorial Aplikasi android client server menggunakan REST API DjangoTutorial Aplikasi android client server menggunakan REST API Django
Tutorial Aplikasi android client server menggunakan REST API Django
 
Tutorial lanjutan java netbeans 8 : Create Read Update Delete
Tutorial lanjutan java netbeans 8 : Create Read Update DeleteTutorial lanjutan java netbeans 8 : Create Read Update Delete
Tutorial lanjutan java netbeans 8 : Create Read Update Delete
 
Mengamankan Aplikasi Java EE 6
Mengamankan Aplikasi Java EE 6Mengamankan Aplikasi Java EE 6
Mengamankan Aplikasi Java EE 6
 
Tugas pbw 1310652044_1310652045
Tugas pbw 1310652044_1310652045Tugas pbw 1310652044_1310652045
Tugas pbw 1310652044_1310652045
 
Tugas pbw 1310652044_1310652045
Tugas pbw 1310652044_1310652045Tugas pbw 1310652044_1310652045
Tugas pbw 1310652044_1310652045
 
filter data pada datatables server side 5 menggunakan yajra laravel adminlte
filter data pada datatables server side 5 menggunakan yajra laravel adminltefilter data pada datatables server side 5 menggunakan yajra laravel adminlte
filter data pada datatables server side 5 menggunakan yajra laravel adminlte
 
J S F
J S FJ S F
J S F
 
Jsf
JsfJsf
Jsf
 
Jsf
JsfJsf
Jsf
 
Tugas analisa faktor kualitas
Tugas analisa faktor kualitasTugas analisa faktor kualitas
Tugas analisa faktor kualitas
 
Analisa Software Quality Factor
Analisa Software Quality FactorAnalisa Software Quality Factor
Analisa Software Quality Factor
 
Membuat Project Web Service
Membuat Project Web ServiceMembuat Project Web Service
Membuat Project Web Service
 
Kelompok 7
Kelompok 7Kelompok 7
Kelompok 7
 

More from Individual Consultants

O T O M A S I P E N G A W A S R U M A H D E N G A N M E N G G U N A K A N...
O T O M A S I  P E N G A W A S  R U M A H  D E N G A N  M E N G G U N A K A N...O T O M A S I  P E N G A W A S  R U M A H  D E N G A N  M E N G G U N A K A N...
O T O M A S I P E N G A W A S R U M A H D E N G A N M E N G G U N A K A N...
Individual Consultants
 
Jeni Web Programming Bab 16 App Case Study
Jeni Web Programming Bab 16 App Case StudyJeni Web Programming Bab 16 App Case Study
Jeni Web Programming Bab 16 App Case Study
Individual Consultants
 
Jeni Web Programming Bab 15 J2 Ee Design Pattern
Jeni Web Programming Bab 15 J2 Ee Design PatternJeni Web Programming Bab 15 J2 Ee Design Pattern
Jeni Web Programming Bab 15 J2 Ee Design Pattern
Individual Consultants
 
Jeni Web Programming Bab 5 Sql Dan Jdbc
Jeni Web Programming Bab 5 Sql Dan JdbcJeni Web Programming Bab 5 Sql Dan Jdbc
Jeni Web Programming Bab 5 Sql Dan Jdbc
Individual Consultants
 
Jeni Web Programming Bab 3 Advanced Servlets
Jeni Web Programming Bab 3 Advanced ServletsJeni Web Programming Bab 3 Advanced Servlets
Jeni Web Programming Bab 3 Advanced Servlets
Individual Consultants
 
Jeni Web Programming Bab 2 Basic Servlets
Jeni Web Programming Bab 2 Basic ServletsJeni Web Programming Bab 2 Basic Servlets
Jeni Web Programming Bab 2 Basic Servlets
Individual Consultants
 
Jeni Web Programming Bab 1 Pengenalan Pemrograman Web
Jeni Web Programming Bab 1 Pengenalan Pemrograman WebJeni Web Programming Bab 1 Pengenalan Pemrograman Web
Jeni Web Programming Bab 1 Pengenalan Pemrograman Web
Individual Consultants
 
Jeni J2 Me Bab04 Low Level User Interface
Jeni J2 Me Bab04 Low Level User InterfaceJeni J2 Me Bab04 Low Level User Interface
Jeni J2 Me Bab04 Low Level User Interface
Individual Consultants
 
Jeni J2 Me Bab03 High Level User Interface
Jeni J2 Me Bab03 High Level User InterfaceJeni J2 Me Bab03 High Level User Interface
Jeni J2 Me Bab03 High Level User Interface
Individual Consultants
 
Jeni J2 Me Bab02 Memulai Pemrograman Mobile
Jeni J2 Me Bab02 Memulai Pemrograman MobileJeni J2 Me Bab02 Memulai Pemrograman Mobile
Jeni J2 Me Bab02 Memulai Pemrograman Mobile
Individual Consultants
 

More from Individual Consultants (20)

24602905 Karsten Nohl
24602905  Karsten  Nohl24602905  Karsten  Nohl
24602905 Karsten Nohl
 
O T O M A S I P E N G A W A S R U M A H D E N G A N M E N G G U N A K A N...
O T O M A S I  P E N G A W A S  R U M A H  D E N G A N  M E N G G U N A K A N...O T O M A S I  P E N G A W A S  R U M A H  D E N G A N  M E N G G U N A K A N...
O T O M A S I P E N G A W A S R U M A H D E N G A N M E N G G U N A K A N...
 
Sistem Penyadapan Intruder In The Darkness
Sistem  Penyadapan  Intruder In  The  DarknessSistem  Penyadapan  Intruder In  The  Darkness
Sistem Penyadapan Intruder In The Darkness
 
P R O S P E K T U S P E R U S A H A A N I K K I G R O U P D E N G A N C ...
P R O S P E K T U S  P E R U S A H A A N  I K K I  G R O U P  D E N G A N  C ...P R O S P E K T U S  P E R U S A H A A N  I K K I  G R O U P  D E N G A N  C ...
P R O S P E K T U S P E R U S A H A A N I K K I G R O U P D E N G A N C ...
 
Jeni Web Programming Cover
Jeni Web Programming CoverJeni Web Programming Cover
Jeni Web Programming Cover
 
Jeni Web Programming Bab 16 App Case Study
Jeni Web Programming Bab 16 App Case StudyJeni Web Programming Bab 16 App Case Study
Jeni Web Programming Bab 16 App Case Study
 
Jeni Web Programming Bab 15 J2 Ee Design Pattern
Jeni Web Programming Bab 15 J2 Ee Design PatternJeni Web Programming Bab 15 J2 Ee Design Pattern
Jeni Web Programming Bab 15 J2 Ee Design Pattern
 
Jeni Web Programming Bab 5 Sql Dan Jdbc
Jeni Web Programming Bab 5 Sql Dan JdbcJeni Web Programming Bab 5 Sql Dan Jdbc
Jeni Web Programming Bab 5 Sql Dan Jdbc
 
Jeni Web Programming Bab 4 Dasar Jsp
Jeni Web Programming Bab 4 Dasar JspJeni Web Programming Bab 4 Dasar Jsp
Jeni Web Programming Bab 4 Dasar Jsp
 
Jeni Web Programming Bab 3 Advanced Servlets
Jeni Web Programming Bab 3 Advanced ServletsJeni Web Programming Bab 3 Advanced Servlets
Jeni Web Programming Bab 3 Advanced Servlets
 
Jeni Web Programming Bab 2 Basic Servlets
Jeni Web Programming Bab 2 Basic ServletsJeni Web Programming Bab 2 Basic Servlets
Jeni Web Programming Bab 2 Basic Servlets
 
Jeni Web Programming Bab 1 Pengenalan Pemrograman Web
Jeni Web Programming Bab 1 Pengenalan Pemrograman WebJeni Web Programming Bab 1 Pengenalan Pemrograman Web
Jeni Web Programming Bab 1 Pengenalan Pemrograman Web
 
Jeni J2 Me Bab10 Optional%20 Packages
Jeni J2 Me Bab10 Optional%20 PackagesJeni J2 Me Bab10 Optional%20 Packages
Jeni J2 Me Bab10 Optional%20 Packages
 
Jeni J2 Me Bab09 Optimisasi
Jeni J2 Me Bab09 OptimisasiJeni J2 Me Bab09 Optimisasi
Jeni J2 Me Bab09 Optimisasi
 
Jeni J2 Me Bab08 Web Services
Jeni J2 Me Bab08 Web ServicesJeni J2 Me Bab08 Web Services
Jeni J2 Me Bab08 Web Services
 
Jeni J2 Me Bab06 Jaringan
Jeni J2 Me Bab06 JaringanJeni J2 Me Bab06 Jaringan
Jeni J2 Me Bab06 Jaringan
 
Jeni J2 Me Bab05 Persistence
Jeni J2 Me Bab05 PersistenceJeni J2 Me Bab05 Persistence
Jeni J2 Me Bab05 Persistence
 
Jeni J2 Me Bab04 Low Level User Interface
Jeni J2 Me Bab04 Low Level User InterfaceJeni J2 Me Bab04 Low Level User Interface
Jeni J2 Me Bab04 Low Level User Interface
 
Jeni J2 Me Bab03 High Level User Interface
Jeni J2 Me Bab03 High Level User InterfaceJeni J2 Me Bab03 High Level User Interface
Jeni J2 Me Bab03 High Level User Interface
 
Jeni J2 Me Bab02 Memulai Pemrograman Mobile
Jeni J2 Me Bab02 Memulai Pemrograman MobileJeni J2 Me Bab02 Memulai Pemrograman Mobile
Jeni J2 Me Bab02 Memulai Pemrograman Mobile
 

Jeni Web Programming Bab 8 Advanced Mvc

  • 1. J.E.N.I BAB 8 Advanced MVC 8.1 Pendahuluan Pada pembahasan sebelumnya, kita telah memahami garis besar dasar dari Struts. Kita telah mempelajari bagaimana cara mengimplementasikan framework Struts pada aplikasi dengan mengkonfigurasi ActionServlet yang disediakan untuk menangani request. Kita juga telah mempelajari cara untuk membuat instance dari Action classes yang berfungsi sebagai action handlers pada penyerahan form dan user request yang lain. Telah diketahui cara pembuatan ActionForm classes yang menyediakan cara mudah transfer data dari form menuju ActionHandlers yang dibuat. Terakhir, telah diketahui pula mengenai penggunaan tag library untuk menggabungkan form HTML dalam halaman JSP pada framework. Pada bab ini, kita akan membahas beberapa teknik dan fitur terapan dari Struts framework. Pertama, akan kita pelajari mengenai penggunaan DynaActionForms untuk mengurangi jumlah class yang kita gunakan dalam framework. Kemudian, akan kita telusuri bagaimana framework validator berfungsi dalam hal validasi baik pada server-side maupun client-side. Terakhir, akan dikenalkan Tiles framework, yang memiliki fitur presentationlayer yang lebih kompleks, sehingga dapat membuat templating machine terhadap halaman – halaman yang ada pada aplikasi. 8.2 DynaActionForms Pada aplikasi skala besar utamanya, jumlah class yang perlu untuk dibuat dan dipergunakan dapat begitu tinggi. Struts mendukung classes yang cukup membantu hal ini, terutama dalam hubungannya dengan ActionForms, yang mempersyaratkan solidnya implementasi form keseluruhan pada aplikasi. Banyak dari developer yang terjebak pada batasan ini, utamanya pada saat ActionForms adalah berupa JavaBeans sederhana yang memiliki method get dan set pada tiap form fields pada representasinya. Strus memiliki penyelesaian atas permasalahan tersebut pada versi 1.1, disebut dengan DynaActionForms. DynaActionForms sangat mirip dengan ActionForms, sehingga sebuah instance darinya dapat diambil dan method dipanggil pada saat ActionHandlers memerlukan data yang ada. Perbedaan utamanya adalah, tiap DynaActionForm tidak terdeklarasi sebagai class terpisah, melainkan terkonfigurasi dalam struts-config.xml. Advanced MVC 1
  • 2. J.E.N.I Dibawah ini adalah contoh konfigurasi dan deklarasi DynaActionForms. Kita gunakan sesuai contoh pada bab sebelumnya, disini dibuat sebuah ActionForm yang akan menangani data yang dibutuhkan pada saat log in. <?xml version=”1.0”?> <!DOCTYPE struts-config PUBLIC “-//Apache Software Foundation//DTD Struts Configuration 1.1//EN” “http://jakarta.apache.org/struts/dtds/struts- config_1_1.dtd” > <struts-config> <form-beans> <form-bean name=”loginForm” type="org.apache.struts.action.DynaActionForm"> <form-property name=”loginName” type=”java.lang.String”/> <form-property name=”password” type=”java.lang.String”/> </form-bean> </form-beans> <action-mappings> <action name=”loginForm” path=”/login” scope=”request” type=”login.LoginAction”> <forward name=”success” path=”/success.jsp”/> <forward name=”failure” path=”/failure.jsp”/> </action> </action-mappings> </struts-config> Seperti yang terlihat, pembuatan DynaActionForm berlangsung dengan amat sederhana, dan pada beberapa kasus, deklarasi DynaActionForm dalam file konfigurasi lebih sederhana dan cepat dibandingkan dengan menuliskan instance ActionForm secara langsung. Kita tidak perlu memperhatikan form properties serta membuat method get dan set pada setiap ActionForm, dengan menggunakan DynaActionForm hanya memerlukan deklarasi property name dan type. Berikut ini adalah Java types yang didukung oleh DynaActionForm : o java.lang.bigDecimal o java.lang.bigInteger o boolean dan java.lang.Boolean o char dan java.lang.Character o double dan java.lang.Double o float dan java.lang.Float o int dan java.lang.Integer o long dan java.lang.Long o short dan java.lang.Short o java.lang.String o java.lang.Date o java.lant.Time o java.sql.TimeStamp Advanced MVC 2
  • 3. J.E.N.I 8.3 Validators Validasi input sangat dibutuhkan dalam aplikasi berbasis web. Dengan menggunakan validasi input, didapatkan koreksi atas format dan isi dari input yang diberikan user. Dalam banyak kasus, seorang user tidak selalu memasukkan input yang benar, huruf dapat dimasukkan dalam field numerik dan sebaliknya; sebuah field yang mempersyaratkan minimal 3 digit hanya diisikan dengan2 digit, dan sebagainya. Adalah tanggung jawab dari aplikasi untuk waspada dan menangani kesalahan input disamping kesalahan hasil dari proses business logic (password tidak cocok dan sebagainya). Struts meringankan kesulitan yang dihadapi developer dalam menjalankan validasi dengan menyediakan validasi framework yang disebut dengan Validator Framework. Penggunaan framework ini memiliki beberapa kelebihan : o Framework menyediakan beberapa aturan validasi. Terdapat beberapa rangkaian pemeriksaan umum pada aplikasi seperti pemeriksaan format, panjang karakter dan sebagainya. Framework ini menyediakan komponen – komponen yang dibutuhkan sehingga developer tidak lagi membuat kode yang akan melakukan proses validasi. Komponen yang disediakan umumnya cukup mewakili proses validasi global, namun proses validasi lain juga dapat dibuat. o Mengurangi redudansi kode. Framewok memisahkan komponen yang melakukan validasi dengan komponen yang memerlukan validasi. Hal ini juga membuat developer dalam penggunaan ulang kode dengan lebih mudah : komponen yang memerlukan validasi cukup mendeklarasikan jenis validasi yang diinginkan disamping menambahkan kode validasi pada komponen tersebut. o Satu titik maintenance. Developer tidak lagi menelusuri aplikasi secara menyeluruh untuk memeriksa aturan validasi yang terdapat pada bermacam komponen. Seluruh aturan dideklarasikan pada file konfigurasi yang diberikan oleh framework. Terdapat beberapa langkah yang dibutuhkan dalam menambahkan fungsi – fungsi validator dalam aplikasi Struts : o Konfigurasi Validator Plug-in o Deklarasi form yang memerlukan validasi, dan tipe validasi yang dibutuhkan o Membuat pesan yang akan ditampilkan jika proses validasi mengalami kegagalan o Merubah base class dari ActionForms menjadi ValidatorForm pada aplikasi. Dan juga merubah tipe dari DynaActionForms menjadi DynaValidatorForm Advanced MVC 3
  • 4. J.E.N.I 8.3.1 Konfigurasi Validator Plug-in Langkah ini diperlukan untuk membuat Struts framework mengetahui penggunaan Validator framework. Hal yang perlu dilakukan adalah menambahkan beberapa baris kode dalam struts-config.xml. Berikut ini contohnya : ... <forward name=”success” path=”/success.jsp”/> <forward name=”failure” path=”/failure.jsp”/> </action> </action-mappings> <plug-in className="org.apache.struts.validator.ValidatorPlugIn"> <set-property property="pathnames" value="/WEB-INF/validator-rules.xml, /WEB-INF/validation.xml"/> </plug-in> </struts-config> Path names property menginformasikan pada framework dimana letak untuk menemukan file konfigurasi yang diperlukan. Terdapat beberapa file konfigurasi : validator-rules.xml dan validator.xml. 8.3.2 validator-rules.xml File konfigurasi ini mendefinisikan classes yang mengimplementasi kode validasi. Framework menyertakan file ini dengan validator classes yang telah didefinisikan sebelumnya. Dibawah ini adalah daftar logical names dari validators yang disertakan dalam framework : o required – properties yang diberi tanda sebagai required harus memiliki minimal satu karakter disamping spasi o mask – properties dengan mask validator harus sesuai dengan format penulisan yang dicantumkan pada validator dengan menggunakan mask variable o minlength – property tersebut harus memiliki panjang minimal sama atau lebih dari min variable yang diberikan o maxlength – property tersebut harus memiliki panjang yang sama atau kurang dari max variable yang diberikan o range – property memiliki panjang dalam area antara max dan min value yang diberikan o byte, short, integer, long, float, double – property harus sesuai dengan tipe primitive yang diberikan o date – validasi sukses jika value dari property berupa tanggal yang valid o creditCard – validasi berhasil bila value dari property adalah format nomor kartu kredit yang valid Advanced MVC 4
  • 5. J.E.N.I o email – validasi berhasil jika value dari property tersebut format email yang benar 8.3.3 validation-xml File konfigurasi ini menginformasikan pada framework form apa saja yang membutuhkan validasi dan aturan validasi apa yang akan diimplementasikan. Framework ini hanya menyediakan struktur dari file. Developer harus mengkonfigurasi sendiri file ini untuk membantu fungsionalitas framework. 8.3.3.1 Menkonfigurasi file validation.xml Sekali lagi, kita akan mempelajari elemen yang dibutuhkan oleh file konfigurasi pada contoh. Dibawah ini adalah potongan yang akan terlihat dari file jika kita akan mengkonfigurasi form login terlebih dahulu. <formset> <form name=”loginForm”> <field property=”loginName” depends=”required”> <arg0 key=”error.loginname.required”/> </field> <field property=”password” depends=”required,minlength”/> <arg0 key=”error.password.required”/> <var> <var-name>min</var-name> <var-value>4</var-value> </var> </field> </form> </formset> Berikut adalah macam elemen yang terdapat pada file XML ini. <formset> Elemen ini berfungsi sebagai container untuk elemen – elemen pada form <form> Setiap form dalam aplikasi yang memerlukan proses validasi harus memiliki <form> elemen yang berhubungan. Atribut name pada hal ini harus sesuai dengan name dari form-bean yang dikonfigurasi pada struts-config.xml. Elemen ini dapat mengandung satu atau lebih elemen <field>. Advanced MVC 5
  • 6. J.E.N.I <field> Tiap elemen field merepresentasikan sebuah property pada form yang memerlukan validasi. Elemen ini memiliki atribut – atribut sebagai berikut : o property – nama dari property dalam form yang akan divalidasi o depends – daftar validator yang dipisahkan dengan tanda koma yang kemudaian akan diaplikasikan pada property. Nama dari validator didefinisikan dalam validator-rules.xml. <arg0> Mendefinisikan key pada error message yang akan ditampilkan jika property gagal dalam proses validasi. Key dan error message yang akan ditampilkan dapat ditemukan pada resource bundle yang dibuat oleh developer. <var> Tiap elemen var mendefinisikan sebuah variabel dengan value masing – masing yang akan diteruskan menuju validator. Nama dari variabel didefinisikan dengan elemen turunan <var-name>, sedangkan isi value-nya didefinisikan menggunakan elemen turunan <var-value>. Telah dijelaskan di atas informasi – informasi tentang bermacam elemen pada file konfigurasi, dapat dikatakan bahwa contoh tersebut mengkonfigurasi form login aplikasi Struts sehingga loginName dan password field harus memiliki value yang dimasukkan. Sebagai tambahan, password field harus memiliki panjang minimal 4 karakter untuk melewati proses validasi. 8.3.3.2 Mendefinisikan resource bundle Elemen <arg0> di atas mendefinisikan sebuah key yang perlu dicocokkan dengan sebuah entry pada resource bundle. Entry tersebut kemudian digunakan untuk menentukan pesan yang akan ditampilkan pada user. Validator framework menggunakan resource bundle yang juga digunakan oleh Struts framework, dimana pada kondisi default, dapat ditemukan pada direktori WEB-INF/classes dengan nama ApplicationResources.properties. Jika file resource bundle tersebut tidak ditemukan pada aplikasi, maka buatlah sebuah text file dengan nama yang sama. Entry pada resource bundle adalah pasangan sederhana berupa key=value. Pada konfigurasi file diatas, kita dapatkan isi file sebagai berikut : error.loginname.required=Masukkan nama anda error.password.required=Anda belum mengisi password atau password kurang dari 4 karakter Advanced MVC 6
  • 7. J.E.N.I Langkah terakhir dalam menggunakan validation framework adalah mengubah ActionForm dan DynaActionForm classes untuk memakai classes yang disediakan. Gunakan DynaActionForm pada contoh sebelumnya : <?xml version=”1.0”?> <!DOCTYPE struts-config PUBLIC “-//Apache Software Foundation//DTD Struts Configuration 1.1//EN” “http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd” > <struts-config> <form-beans> <form-bean name=”loginForm” type="org.apache.struts.validator.DynaValidatorForm"> <form-property name=”loginName” type=”java.lang.String”/> <form-property name=”password” type=”java.lang.String”/> </form-bean> </form-beans> <action-mappings> <action name=”loginForm” path=”/login” scope=”request” type=”login.LoginAction” validation=”true”> <forward name=”success” path=”/success.jsp”/> <forward name=”failure” path=”/failure.jsp”/> </action> </action-mappings> </struts-config> 8.4 Tiles Framework lain yang bekerja dengan Struts adalah Tiles framework. Dengan menggunakan Tiles, kita dapat mendefinisikan templates dan screen instances yang dapat digunakan dalam aplikasi dengan mudah. Apakah templates itu? Secara ringkas, sebuah halaman template adalah desain layout halaman yang dapat digunakan kembali oleh halaman apapun pada aplikasi. Penggunaan templates membuat aplikasi terlihat lebih konsisten. Untuk lebih memahami konsep templates, mari kita perhatikan beberapa halaman dari aplikasi web : HALAMAN DARI SITUS TERPERCAYA Seperti terlihat pada halaman – halaman tersebut, terdapat beberapa elemen desain yang dipakai. Secara keseluruhan menggunakan rangkaian navigational links yang sama pada bagian kiri dan rangkaian gambar pada bagian atas, serta bagian yang berubah antara halaman yang berbeda adalah bagian tengah halaman. Advanced MVC 7
  • 8. J.E.N.I Pertimbangkan bagaimana cara kita untuk mengimplementasikan beberapa halaman yang sama. Jika kita implementasikan pada setiap halaman seperti yang terlihat, dalam hal ini tepat satu halaman yang berhubungan dengan halaman-halaman yang terlihat pada gambar, pada nantinya kita akan mengalami kesulitan pada saat melakukan proses maintenance. Hal itu dikarenakan oleh banyaknya duplikasi kode yang akan digunakan, jika pada suatu saat seseorang memutuskan bahwa gambar pada halaman tidak terlihat bagus, ataupun navigational menu pada bagian kiri tidak terlalu menarik, perubahan akan dilakukan terhadap seluruh halaman yang ada. Seorang programmer mengetahui bahwa pembagian area kode dapat diduplikasikan pada seluruh halaman aplikasi. Konsep ini juga dapat diterapkan pada halaman JSP/HTML : navigational links dapat berupa satu halaman tersendiri, header images sebagai halaman lain, begitu pula dengan footer. Halaman – halaman ini kemudian dapat digunakan pada halaman dengan isi body. Hal ini dapat dilakukan tanpa menggunakan framework apapun, cukup menggunakan <jsp:include> action yang telah dibahas sebelumnya pada bagian dasar JSP. Terdapat penyelesaian yang lebih baik, yaitu dengan membuat bagian body sebagai halaman bagian JSP tersendiri, kemudian membuat sebuah halaman JSP lain yang akan berfungsi sebagai default format dan layout dari halaman halaman yang ada. Seorang developer kemudian akan mengimplementasikannya dengan cara memasukkan halaman yang berisi body content dalam template tersebut. Terlihat jelas kelebihan dari cara diatas : segala keperluan perubahan hanya akan dilakukan pada satu aspek pada presentation layer, sebagai contoh header, akan diterapkan pada seluruh halaman aplikasi hanya dengan memodifikasi satu halaman. Jika anda ingin mengganti layout dari aplikasi, disamping mengerjakan content dari aplikasi, cukup dilakukan dengan mengubah halaman template yang digunakan sebelumnya. Berikutnya akan dibahas mengenai implementasi template menggunakan Tiles Framework : 8.4.1 Mempersiapkan Tiles Sebelum menggunakan Tiles framework, perlu dilakukan beberapa langkah persiapan sebagai berikut : 1. Menambahkan beberapa baris kode berikut pada struts-config.xml sebelum tag penutup </struts-config> <plug-in className="org.apache.struts.tiles.TilesPlugin" > <set-property property="definitions-config" value="/WEB-INF/tiles-defs.xml" /> </plug-in> Advanced MVC 8
  • 9. J.E.N.I Kode ini menginformasikan pada Struts bahwa aplikasi akan menggunakan TilesFramework dan file konfigurasinya diletakkan pada direktori /WEB-INF dengan nama tiles-defs.xml 2. Langkah berikutnya, salin file struts-tiles.tld dan tiles-config.dtd dari direktori library Struts menuju direktori /WEB-INF. File pertama berisi macam – macam tags yang dibutuhkan dalam penggunaan Tiles, sedangkan file kedua berisi struktur file konfigurasi dari tiles-defs. 3. Buat sebuah file konfigurasi kosong yang akan diisi kemudian. Buat sebuah file XML pada direktori /WEB-INF. kemudian beri nama dengan tiles-defs.xml. Isi file tersebut dengan kode sebagai berikut : <!DOCTYPE tiles-definitions PUBLIC "-//Apache Software Foundation//DTD Tiles Configuration//EN" "http://jakarta.apache.org/struts/dtds/tiles-config.dtd"> <tiles-definitions> </tiles-definitions> Jika langkah – langkah tersebut telah dijalankan seluruhnya, maka Tiles Framework siap digunakan. 8.4.2 Membuat Layout Template Langkah pertama dalam pembuatan sebuah template adalah mengidentifikasi komponen yang akan ditempatkan. Sebagai contoh, sebagai besar halaman web memiliki komponen header, footer, menu bar dan body. Berikut ini rancang diagram dasar template yang akan dibuat : Header Menu Body Bar Footer Advanced MVC 9
  • 10. J.E.N.I Untuk membuat sebuah halaman template yang menerapkan layout tersebut, ikuti langkah – langkah berikut ini : 1. Buat sebuah halaman JSP baru 2. Import tag library dari Tiles 3. Buat file HTML yang menerapkan layout tersebut, biarkan kosong pada bagian elemen yang digunakan 4. Gunakan tag <tiles:insert> yang berfungsi sebagai penentu letak dari komponen layout Halaman HTML yang menerapkan layout tersebut memiliki bentuk sesederhana tabel, dengan komponen sebagai elemen tabel seperti terlihat pada halaman JSP di bawah ini : <%@ taglib uri="http://jakarta.apache.org/struts/tags-tiles" prefix="tiles" %> <HTML> <HEAD> <TITLE><tiles:getAsString name="title"/></TITLE> </HEAD> <BODY> <TABLE border="0" width="100%" cellspacing="5"> <TR> <TD colspan="2"><tiles:insert attribute="header"/></TD> </TR> <TR> <TD width="140" valign="top"> <tiles:insert attribute="menu"/> </TD> <TD valign="top" align="left"> <tiles:insert attribute="body"/> </TD> </TR> <TR> <TD colspan="2"> <tiles:insert attribute="footer" /> </TD> </TR> </TABLE> </BODY> </HTML> Terdapat dua macam tag pada contoh yang diberikan diatas : <tiles:insert> dan <tiles:getAsString>. o <tiles:insert> - tag ini cukup sering digunakan pada Tiles Framework. Dalam hal ini berfungsi untuk memasukkan bagian JSP yang direferensikan dengan nama yang terisi pada atribut attribute. o <tiles:getAsString> - tag ini berfungsi menampung value yang diisikan pada komponen dengan atribut name sebagai String. Advanced MVC 10
  • 11. J.E.N.I 8.4.3 Membuat Screen Definitions Setelah memuat sebuah template, kita dapat menggunakannya untuk mendefinisikan sebuah screen. Pembuatan screen definition dapat dilakukan dalam dua cara dalam Tiles framework : didefinisikan dalam halaman JSP, atau dalam file XML yang dikenali oleh framework. Membuat sebuah definition menggunakan halaman JSP : Pembuatan definition dalam halaman JSP menerapkan banyak macam tag yang disertakan oleh Tiles Framework : o <tiles:definition> - tag dasar yang digunakan untuk mendefinisikan layer. Value dari attribute id adalah nama yang terhubung dengan komponen lain. Value dari page attribute adalah lokasi dimana template file tersebut berasal. o <tiles:put> - tag ini digunakan untuk menempatkan sebuah value ke dalam sebuah attribute dalam template. Name attribute adalah nama dari lokasi target dalam template, sedangkan value mendefinisikan lokasi dari fragmen JSP yang akan digunakan. Perhatikan contoh dibawah ini : <%@ taglib uri="http://jakarta.apache.org/struts/tags-tiles" prefix="tiles" %> <tiles:definition id="welcomePage" page="/layout/basicLayout.jsp"> <tiles:put name="title" value="Welcome!"/> <tiles:put name="header" value="/header.jsp"/> <tiles:put name="footer" value="/footer.jsp"/> <tiles:put name="menu" value="/menu.jsp"/> <tiles:put name="body" value="/welcome.jsp"/> </tiles:definition> Pada contoh tersebut, kita membuat sebuah screen definition untuk halaman utama, yaitu halaman muka aplikasi. Halaman tersebut menggunakan layout yang didefinisikan pada daftar, dan menempatkan komponen title, header, footer, menu dan body pada lokasi yang ditentukan pada template. Secara default, definition ini hanya terlihat pada halaman JSP yang memiliki deklarasi definition terkait. Untuk mengubahnya, kita dapat menambahkan sebuah value kedalam atribut opsional scope pada tag <tiles:definition>. Values pada atribut tersebut mencakup : page, request, session dan application. Advanced MVC 11
  • 12. J.E.N.I 8.4.4 Membuat definition menggunakan konfigurasi file XML Cara kedua untuk membuat screen definitions adalah mencantumkan konfigurasi pada file tiles-defs.xml. Syntax penulisan konfigurasi tersebut sangat mirip dengan tag <tiles:definition> yang digunakan sebelumnya : <!DOCTYPE tiles-definitions PUBLIC "-//Apache Software Foundation//DTD Tiles Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/tiles-config_1_1.dtd"> <tiles-definitions> <definition name="welcomePage" page="/layout/basicLayout.jsp"> <put name="title" value="Welcome!"/> <put name="header" value="/header.jsp"/> <put name="footer" value="/footer.jsp"/> <put name="menu" value="/menu.jsp"/> <put name="body" value="/welcome.jsp"/> </definition> <!-- ... more definitions ... --> </tiles-definitions> Apakah perbedaan antara dua cara tersebut? Kedua cara menyimpan definition sebagai JavaBean ke dalam memory. Method pada JSP me-load definition setelah fragmen JSP yang berisi definition tersebut telah diakses, dan secara default, membuatnya terlihat hanya pada halaman yang sama. Kondisi ini membuat penggunaan ulang dari screen definition pada aplikasi sedikit lebih sulit, dibutuhkan perhatian ekstra untuk menghindari loading dan loading definition yang tidak penting terhadap memory. Dilain pihak, XML method membuat screen definition dapat digunakan oleh keseluruhan aplikasi secara langsung setelah startup aplikasi. Tiles framework membuatnya permanen dalam memory. Satu-satunya hal yang diperlukan oleh komponen untuk menggunakannya adalah dengan memasukkan nama definition tersebut. Kelebihan lain dari penggunaan XML method dalam pembuatan screen definition adalah definition itu sendiri dapat digunakan sebagai ActionForwards oleh Struts framework. Hal ini dapat mengurangi secara drastic halaman JSP yang dibutuhkan oleh aplikasi. Menggunakan definition sebagai ActionForwards merupakan pokok pembahasan yang akan dibahas lebih detail selanjutnya. Advanced MVC 12
  • 13. J.E.N.I 8.4.5 Menggunakan Screen Definitions Membuat sebuah screen definition belum cukup untuk ditampilkan pada user. Supaya sebuah definition dapat dipakai, gunakan tag <tiles:insert> dan isikan nama definition yang akan ditampilkan : <%@ taglib uri="http://jakarta.apache.org/struts/tags-tiles" prefix="tiles" %> <tiles:insert beanName="welcomePage" flush="true"/> Salah satu permasalahan dengan pendekatan ini adalah meningkatkan jumlah halaman JSP yang dibutuhkan untuk menampilkan layer yang berbeda pada user, disamping komponen body content, tiap screen membutuhkan halaman terpisah yang akan menggunakan screen definition. Untuk sebuah aplikasi yang membutuhkan 100 screen atau lebih, jumlah halaman yang dibutuhkan akan berlipat ganda. Pendekatan yang lebih baik adalah dengan menggunakan definition sebagai target dari ActionForward. Dengan menambahkan Tiles framework sebagai plugin pada Struts, Struts mengetahui screen definitions yang dibuat dengan menggunakan Tiles. Screen names berfungsi sebagai penentu lokasi pada tag <forward>. Perhatikan contoh di bawah ini : <action-mappings> <action name=”loginForm” path=”/login” scope=”request” type=”login.LoginAction” validation=”true”> <forward name=”success” path=”/welcomePage”/> <forward name=”failure” path=”/failure.jsp”/> </action> </action-mappings> Disini kita melakukan modifikasi atas contoh dari struts-config.xml sebelumnya, sehingga pada situasi dengan kondisi success dipetakan pada definition welcomePage. Seperti yang terlihat, pendekatan ini cukup sederhana, mudah digunakan, dan mengurangi jumlah halaman JSP yang harus dibuat. 8.4.6 Menambahkan Definitions Salah satu kekuatan dari Tiles framework dari templating method lain adalah mengijinkan extensions pada screen definitions. Screen extensions bekerja dengan cara yang sama dengan inheritance class pada Java : extended screen menurunkan seluruh properties dan attributes dari parent Definition. Hal ini mengijinkan kita untuk membuat sebuah definition dasar yang mendeklarasikan values untuk attribut yang diextend oleh definitions terutama pada halaman – halaman tertentu. Advanced MVC 13
  • 14. J.E.N.I Perhatikan contoh dibawah ini : <definition name="basicDefinition" page="/layout/basicLayout.jsp"> <put name="header" value="/header.jsp"/> <put name="footer" value="/footer.jsp"/> <put name="menu" value="/menu.jsp"/> </definition> <definition name="welcomePage" extends="basicDefinition"> <put name="title" value="Welcome!"/> <put name="body" value="/welcome.jsp"/> </definition> <definition name="otherPage" extends="basicDefinition"> <put name="title" value="My title"/> <put name="body" value="/otherContent.jsp"/> </definition> Dengan pembuatan sebuah base screen yang kemudian dapat di extend, kita menghindari penulisan ulang pada definisi value attribute. Dan juga, jika diperlukan perubahan dalam sebuah komponen yang terdapat pada base attributes, perubahan tersebut dapat dengan cepat diterapkan pada seluruh screen secara otomatis dengn memodifikasi base screen definitions. Advanced MVC 14