jump to navigation

CRUD dengan Strus 2 (1) May 6, 2007

Posted by Dedy Rustandi in Java.
trackback

Setelah lama membaca ebook nya manning yg berjudul WebWork in action akhirnya nyoba mbuat aplikasi crud sederhana. Tapi kali ini yang aku coba bukan webwork tapi Struts2. Struts 2 dibangun diatas webwork, jadi klo udah mahir webwork dijamin mahir struts 2 pula. Struts 2 beda jauh dengan struts 1.x..disini diperkenalkan yang namanya interceptor dan validator.
Oke kita coba pelajari apa yang ada di Struts 2..
1. setting web.xml
seperti layaknya framework2 lainnya, disini kita harus mendefinisikan filter yang akan mengarahkan request ke servlet yang ada. Biasa disebut dispatcher. Contoh setting filter di web.xml :


<filter>
<filter-name>struts</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

Ini artinya class FilterDispatcher akan mengakses smua request dan response pada url yang diberikan di url-pattern. Jadi klo kita lihat setting diatas, semua request yang ditujukan pada sembarang url / (dalam skup aplikasi web tsb) akan ditangani oleh FilterDispatcher.

2. setting struts.xml
Buat file struts.xml pada root directory src (netbeans) atau pada WEB-INF/classes. Berikut ini contoh isi file struts.xml

<struts>
<include file="struts-default.xml" />
<package name="default" extends="struts-default">
<default-interceptor-ref name="paramsPrepareParamsStack"/>
<action name="index" class="employee.EmployeeAction" method="list">
<result name="success">/jsp/employeePage.jsp</result>
<interceptor-ref name="basicStack" />
</action>
<action name="crud" class="employee.EmployeeAction" method="input">
<result name="success" type="redirect-action">index.jsp</result>
<result name="input">/jsp/employeeForm.jsp</result>
<result name="error">/jsp/error.jsp</result>
</action>
</package>
</struts>

Aq coba bahas satu-persatu sebisanya..:p
<include file=”struts-default.xml” /> memanggil default dari setting file struts.xml yang telah disediakan oleh framework. struts-default.xml berisi deklarasi bean, package n interceptor yang secara default digunakan.
Packages adalah unit konfigurasi yang mencakup actions, results, resulttypes, interceptor dan interceptor-stack. Seperti halnya object,package dapat di extend n dapat di override.
Action Mapping merupakan unit dari framework. Suatu action yang terjadi akan di map pada handler class yang dideklarasikan. Pada contoh diatas, ketika ada request dengan nama index, maka akan ditangani oleh class employee.EmployeeAction dengan method list. Sedangkan request dgn nama crud, method input pada class employee.EmployeeAction akan dieksekusi.
Results mendefinisikan halaman apa yang akan diakses setelah eksekusi method. Pada method yang diakses haruslah memiliki return type string. Pada contoh diatas, jika pada method input return type-nya “success” maka akan diforward ke index.jsp, jika bernilai “input” maka akan mengakses halaman /jsp/employeeForm.jsp..dst

3. Setting struts.properties
Secara default struts akan membaca konstanta yang didefinisikan di file ini. Kita hanya perlu mendefinisikan file properties yang akan kita gunakan untuk aplikasi yg kita bangun.

struts.custom.i18n.resources=guest

Code diatas berarti kita mendefinisikan konstanta yang kita gunakan pada file guest.properties. Contoh isi dari file guest.properties :


#labels
application.title=Employee Maintenance Application
label.employees=Employees
label.delete=Delete
label.edit=Edit
label.employee.edit=Edit Employee
label.employee.add=Add Employee
label.firstName=First Name
label.lastName=Last Name
label.department=Department
label.age=Age

#button labels
button.label.submit=Submit
button.label.cancel=Cancel

##-- errors
errors.prefix=
errors.suffix=

errors.general=An Error Has Occcured
errors.required.firstname=Name is required.
errors.required.lastname=Last name is required.
errors.required.age=Please provide an age.
errors.required.age.limit=Please provide an age between ${min} and ${max}.
errors.required.department=Department is required.

Dengan mendefinisikan konstanta diatas, pada presentation layer (jsp) dapat menggunakan nama variable diatas. Ini sangat memudahkan kita untuk mengedit isi tampilan dan sangat bermanfaat klo kita pengen web kita support multi-language.

4. Membuat Action Class
Selanjutnya adalah membuat action class yang akan menghandle request2. Pada struts.xml, kita telah mendefinisikan action class dengan nama employee.EmployeeAction. So, we create new package named employee and class named EmployeeAction. Below i shown my example code :


/*
* EmployeeAction.java
*
* Created on 2007/04/29, 21:12
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/

package employee;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.Preparable;
import java.util.List;
import model.Employee;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.opensymphony.xwork2.Action;
import service.DepartmentDaoService;
import service.DepartmentService;
import service.EmployeeDaoService;
import service.EmployeeService;
/**
*
* @author デディ
*/
public class EmployeeAction extends ActionSupport implements Preparable{
private Log logger = LogFactory.getLog(this.getClass());
private static EmployeeService empService = new EmployeeDaoService();
private static DepartmentService deptService = new DepartmentDaoService();
private Employee employee;
private List employees;
private List departments;

public void prepare() throws Exception{
departments = deptService.getAllDepartments();
if(employee != null && employee.getEmployeeId()!=null){
employee = empService.getEmployee(employee.getEmployeeId());
}
}
public String doSave(){
if(employee.getEmployeeId() == null){
empService.insertEmployee(employee);
}else{
empService.updateEmployee(employee);
}
return Action.SUCCESS;
}

/** Creates a new instance of EmployeeAction */
public EmployeeAction() {
}

public String doInput(){
return Action.INPUT;
}
public String doList(){
employees = empService.getAllEmployees();
return Action.SUCCESS;
}
public String doDelete(){
empService.deleteEmployee(employee.getEmployeeId());
return Action.SUCCESS;
}
public Employee getEmployee(){
return employee;
}
public void setEmployee(Employee employee){
this.employee = employee;
}
public List getEmployees(){
return employees;
}
public List getDepartments(){
return departments;
}

}

Class diatas mengimplements Preparable, yang berarti harus mengoverride method prepare(). Method ini secara otomatis dipanggil pertama kali, sebelum mengakses method yang lain. Untuk semua method yang akan dipanggil pada file jsp, kita tambahkan “do” sebelum nama method. Jadi pada file struts.xml kita mendefiniskan method input dan list maka pada class ini kita tambahkan method doInput() dan doList() dengan return type String.

to be continued..

Comments»

1. galih - May 9, 2007

Hehehe… apa bedanya dengan webwork ya? ketika aku dunlut yang versi -ready for prime time-, aku lihat xwork-nya masih pakai 2.2.0. Jadi, aku terus aja pakai webwork, wong versinya 2.2.5 hehehehe…

2. Dedy Rustandi - May 9, 2007

@galih

memang sama..lha wong struts 2 dibangun diatas xwork cman ditambah feature2 tambahan yang ada di struts 1


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: