Menangani Exception Di Spring Web Flow – Dengan Berpindah View


Tulisan ini merupakan kelanjutan dari tulisan Menangani Exception Di Spring Web Flow.  Pada tulisan tersebut, jika terdapat exception,  maka Spring Web Flow akan kembali menampilkan halaman yang sama tetapi dengan menyertakan pesan kesalahan.  Sementara dalam beberapa kasus, saya mungkin harus menampilkan halaman (view) lain bila terdapat exception.  Selain itu, mungkin saja exception terjadi di action-state bukan view-state sehingga exception tidak akan ditampilkan.

Bila saya membongkar kode program class program EventFactorySupport, saya akan menemukan fakta bahwa event id yang dihasilkan bila terjadi kesalahan adalah “error“.   Yup, salah satu alasan kenapa saya suka framework open source adalah saya dapat mencari tahu sendiri bila ada yang tidak saya mengerti.   Saat memakai tools closed-source seperti .NET, jika ada sesuatu yang ingin saya lakukan dan Microsoft (dan blogger pendukungnya) belum menjelaskan bagaimana caranya, maka saya hanya bisa pasrah menunggu.  Kembali ke EventFactorySupport, bila saya membuka isi kode programnya, saya akan menemukan bagian seperti berikut ini:

public class EventFactorySupport {
  private static final String SUCCESS_EVENT_ID = "success";
  private static final String ERROR_EVENT_ID = "error";
  private static final String YES_EVENT_ID = "yes";
  private static final String NO_EVENT_ID = "no";
  private static final String NULL_EVENT_ID = "null";
  ...
}

Dengan demikian, bila saya ingin berpindah halaman saat terjadi kesalahan, saya perlu menangkap event iderror” seperti pada contoh definisi flow berikut ini:

...
<action-state id="simpanPemesanan">
  <evaluate expression="pemesananController.simpanPemesanan(flowScope.pemesanan, messageContext)" />
  <transition on="error" to="halamanKesalahan" />
  <transition on="selesai" />
</action-state>

<end-state id="selesai" view="redirect:/" />

Karena method simpanPemesanan dipanggil saat berada di action-state, maka saya perlu melakukan redirect ke sebuah view-state.  Hal ini karena action-state tidak akan pernah menampilkan apa-apa.

Definisi view-state halamanKesalahan sama seperti biasanya, hanya saja harus mendeklarasikan model pemesanan yang akan di-bind!  Bila tidak ada model yang di-bind, maka pesan kesalahan tidak akan ditampilkan.  Informasi lebih lanjut mengenai cara menampilkan kesalahan dapat saya pelajari dengan membaca isi kode program org.springframework.web.servlet.tags.form.ErrorsTag dan org.springframework.web.servlet.BindStatus.   Berikut ini adalah contoh definisi view-state halamanKesalahan:

<view-state id="pesanKesalahan" view="kesalahan/pesanKesalahan" model="pemesanan" />

Pada file JSP untuk view-state tersebut, seperti biasanya, saya perlu menambahkan <form:errors> untuk menampilkan pesan kesalahan dari controller, seperti pada contoh berikut ini:

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<div xmlns:jsp="http://java.sun.com/JSP/Page"
     xmlns:form="http://www.springframework.org/tags/form">
  ...
  <form:form modelAttribute="pemesanan" htmlEscape="true">
    ...
    <form:errors />
    ...
  </form:form>
  ...
</div>

Perihal Solid Snake
I'm nothing...

Apa komentar Anda?

Please log in using one of these methods to post your comment:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: