Akhir-akhir ini saya masih sangat interest nih sama controller yang satu ini. Walaupun banyak orang bilang sekarang lagi hot-hotnya SpringMVC dan Struts merupakan teknologi jaman purba, but hey!! Ini Struts2 yang banyak orang menganggapnya sama dengan Struts(saja), walaupun sebenarnya saya juga belum pernah coba Struts 1 heuheuheu… Tapi biarin aja lah, yang jelas saya masih tetep mau bahas tentang Struts2 ini. Salah satu alasan yang bikin saya cinta Struts2 adalah plugin-nya yang cukup banyak yang sampai sekarang ‘belum’ saya temukan hal serupa pada SpringMVC. Nah karena hal itu kali ini saya mau kasih kabar nih kalau Struts2 ternyata punya versi anotasi untuk menggantikan mappernya yang berbentuk XML (saya juga baru tahu nih :hammer. Kasus ini mirip seperti antara Hibernate Core dengan Hibernate Annotation yang sebenarnya fungsinya sama, hanya berbeda dalam bentuknya saja. Langkah awal bagaimana program Struts2 dapat mengenali anotasi adalah dengan menambahkan library struts2-convention-plugin-2xx.jar pada classpath. File ini sudah satu paket dengan struts-core saat kita download library Struts2 (saya menggunakan versi 2.1.6.1). Nah untuk mempermudah pemahaman (baca: biar saya gak capek ngetik :p), saya akan membandingkan versi anotasi dengan postingan saya sebelumnya yang masih menggunakan XML. Mari memulai membatiknya (baca: coding). Pertama rubah settingan struts.xml menjadi seperti berikut :
1: <!DOCTYPE struts PUBLIC
2: "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"3: "http://struts.apache.org/dtds/struts-2.0.dtd">
4:5: <struts>6: <constant name="struts.enable.DynamicMethodInvocation" value="false" />7: <constant name="struts.devMode" value="false" />8: <!-- default path untuk viewer -->
9: <constant name="struts.convention.result.path" value="/pages" />10: <!-- struts akan secara otomatis mengenali class yang berakhiran
11: Controller sebagai Action Class -->12: <constant name="struts.convention.action.suffix" value="Controller" />13: <constant name="struts.convention.default.parent.package"14: value="struts-default" />15: </struts>
Suffix bersifat opsional, jika baris tersebut tidak ditulis maka secara default struts akan mengenali class yang berakhiran *Action sebagai action class. Kemudian result path berfungsi untuk setting dimana folder viewer diletakkan (secara default result path /WEB-INF/content/). Sekarang mari kita bandingkan versi XML dengan Annotation Berikut contoh versi XML-nya, lihat
1: <package name="default" extends="struts-default" namespace="/cobastruts">2: <action name="HelloVelocity" class="com.mervpolis.struts.HelloWorldAction">3: <result name="success" type="velocity">/page/hello.vm</result>4: </action>5: <action name="HelloJSP" class="com.mervpolis.struts.HelloWorldAction">6: <result name="success">/page/hello.jsp</result>7: </action>8: </package>
Dan berikut ini versi Anotasinya
1: package com.mervpolis.struts;
2:3: import java.sql.Timestamp;
4:5: import org.apache.struts2.convention.annotation.Action;
6: import org.apache.struts2.convention.annotation.Actions;
7: import org.apache.struts2.convention.annotation.Namespace;
8: import org.apache.struts2.convention.annotation.Result;
9:10: import com.opensymphony.xwork2.ActionSupport;
11:12: @Namespace("/cobastruts"
13: @Actions( {14: @Action(value = "HelloVelocity", results = { @Result(name = ActionSupport.SUCCESS, type = "velocity", location = "hello.vm"}),
15: @Action(value = "HelloJSP", results = { @Result(name = ActionSupport.SUCCESS, location = "hello.jsp"}) })
16: public class HelloWorldController extends ActionSupport {17: private String pesan;
18: private String waktu;
19:20: public String execute() {
21:22: pesan = "HELLO WORLD....!!! Method execute telah dijalankan....";
23: waktu = new Timestamp(System.currentTimeMillis()).toString();
24:25: return SUCCESS;
26: }27:28: public void setPesan(String pesan) {29: this.pesan = pesan;
30: }31:32: public String getPesan() {
33: return pesan;
34: }35:36: public void setWaktu(String waktu) {37: this.waktu = waktu;
38: }39:40: public String getWaktu() {
41: return waktu;
42: }43:44: }
Bagaimana? Menurut saya sih annotation lebih efisien daripada XML. Masih berpikir Struts2 susah? Cobain dulu… ^_^