Selasa, 01 Mei 2012

Struts Hibernate

Step by Step Membangun Aplikasi Berbasis Web Menggunakan Struts Hibernate

Hibernate adalah sebuah framework ORM(Object relational Mapping), yaitu mapping dari bentuk tabel di database, menjadi sebuah Objek atau Class

Untuk mapping sendiri dilakukan dengan 2 cara, bisa dengan mendeskripsikan menggunakan XML (hbm.xml), dan bisa juga dengan menggunkaan annotation ( @ )
(pada tutorial ini kita akan menggunakan XML)

Kelebihannya, kita bebas melakukan development berbasis database apa saja, dgn hibernate kita gak perlu lagi menggunakan native sql query (select from where) tapi langsung mengakses ke class-class model nya (POJO-nya)
Design pattern yang digunakan pada tutorial ini menggunakan singleton, dimana design mengharuskan menggunakan 1 instance saja

Tools dan Technologi yang dipakai dalam tutorial ini adalah :
Hibernate 3.0
PostgreSQL 9.0
Eclipse 3.5 (Galileo )
Apache tomcat 6 atau 7

Lib yang dibutuhkan :
antlr-2.7.6.jar
asm-attrs.jar
asm.jar
c3p0-0.9.0.jar
cglib-2.1.3.jar
commons-beanutils-1.7.0.jar
commons-collections-3.2.jar
commons-logging-1.0.4.jar
dom4j-1.6.1.jar
hibernate3.jar
jstl-1.0.6.jar
jta.jar
log4j-1.2.11.jar
postgresql-8.0-311.jdbc2ee.jar
serialization.jar
standard-1.0.6.jar
struts-core-1.3.5.jar
struts-extras-1.3.5.jar
struts-taglib-1.3.5.jar

Tujuannya adalah membuat tampilan menjadi seperti ini




Membuat Table
CREATE TABLE item
(
  item_code character varying(50) NOT NULL,
  item_name character varying(50),
  note character varying(50),
  created_date timestamp without time zone,
  created_by character varying(24),
  last_updated timestamp without time zone,
  last_updated_by character varying(24),
  deleted smallint,
  CONSTRAINT pk_item PRIMARY KEY (item_code)
)
WITH (
  OIDS=TRUE
);

Struktur Project


Hibernate Model Class
File Item.java
package com.samz.bean;

import java.sql.Timestamp;

public class Item {
 
 private String id;
 private String itemName;
 private String note;
 private Timestamp createdDate;
 private String createdBy;
 private Timestamp lastUpdated;
 private String lastUpdatedBy;
 private Integer deleted; 

//constructor & getter and setter methods

}   
Hibernate Xml Mapping
File inilah yang menghubungkan model dengan database atau istilahnya merepresentasikan table dengan model class
File Item.hbm.xml

 
 
  
   
 
   
 
 
 
 
   
 


Membuat Hibernate Configuration File
File ini untuk koneksi dengan database dan tempat mendaftarkan file – file hbm
Nama File : hibernate.cfg.xml

    
        
        org.postgresql.Driver
        jdbc:postgresql://localhost:5432/samz
        postgres
        postgres        
        
        org.hibernate.dialect.PostgreSQLDialect
        
        5
        20
        1800
        50
        3000        
        
        managed        
        org.hibernate.cache.NoCacheProvider        
        true
        true
        2
        
       
 
    


Untuk memastikan apakah koneksi berhasil dan data bisa masuk ke database maka kita test sebagai berikut
package com.samz.test;

import java.sql.Timestamp;

import org.hibernate.Session;

import com.samz.bean.Item;
import com.samz.utility.HibernateUtil;

public class ItemTest {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  Session session = HibernateUtil.getSessionFactory().openSession();
   session.beginTransaction();  
  Item item = new Item(); 
  item.setId("4716");
  item.setItemName("ITEM 1");
  item.setNote("TEST 123");
  item.setCreatedBy("Admin");
  item.setCreatedDate(new Timestamp(System.currentTimeMillis()));
  item.setDeleted(new Integer(0));
  
  session.save(item);
  session.getTransaction().commit();
  System.out.println("Insert Berhasil");

 }

}

Jalankan di eclipse Run As Java Application

Setelah berhasil dijalankan lalu ke step selanjutnya membuat session-factory
File : HibernateUtil.java
package com.samz.utility;

import org.apache.log4j.*;
import org.hibernate.*;
import org.hibernate.cfg.*;

public class HibernateUtil {
 private static Logger log = Logger.getLogger(HibernateUtil.class);
 private static SessionFactory sessionFactory;

 static {
  try {
   log.info("Load Hibernate configuration and build Session Factory");
   sessionFactory = new Configuration().configure()
     .buildSessionFactory();
  } catch (Throwable ex) {
   throw new ExceptionInInitializerError(ex);
  }
 }

 public static SessionFactory getSessionFactory() {
  return sessionFactory;
 }

 public static void shutdown() {
  getSessionFactory().close();
 }

}

Membuat super class dari DAO yaitu GenericDAO dan GenericDAOHibernate, dimana file ini untuk generalisasi save, update dan delete agar tidak perlu lagi mendefiniskan di file – file DAO yang lain
GenericDAO.java
package com.samz.dao;

import java.io.*;
import java.util.*;

public interface GenericDAO<T, extends Serializable>
{
 T findById(ID id, boolean lock);
 T getById(ID id, boolean lock);
 List<T> findByExample(T exampleInstance, String... exlcudeProperty);
 T save(T entity);
 void update(T entity);
 void delete(T entity);
 void deleteFlag(T entity);
 void flush();
 void clear(); 
 void evict(Object obj);
 void refresh(Object obj); 
}
Lalu implementasikan GenericDAO.java di file GenericDAOHibernate.java
package com.samz.dao;

import java.io.Serializable;
import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.util.List;

import org.apache.log4j.Logger;
import org.hibernate.Criteria;
import org.hibernate.LockMode;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Example;

import com.samz.utility.HibernateSessionConversationFilter;
import com.samz.utility.HibernateUtil;

public abstract class GenericDAOHibernate<T, ID extends Serializable> implements GenericDAO<T, ID>
{
 private static Logger log = Logger.getLogger(HibernateSessionConversationFilter.class);
 private Class<T> persistentClass;
 private SessionFactory sf = HibernateUtil.getSessionFactory(); 

 @SuppressWarnings("unchecked")
 public GenericDAOHibernate()
 {
  this.persistentClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
 }

 protected Session getSession()
 {
  return sf.getCurrentSession();
 }
 
 public Class<T> getPersistentClass()
 {
  return persistentClass;
 }

 public void clear()
 {
  getSession().clear();
 }
 
 public void evict(Object obj)
 {
  getSession().evict(obj);
 }

 public void refresh(Object obj)
 {
  getSession().refresh(obj);
 }
 
 @SuppressWarnings("unchecked")
 public T findById(ID id, boolean lock)
 {
  T entity;
  if (lock)
   entity = (T) getSession().load(getPersistentClass(), id, LockMode.UPGRADE);
  else
   entity = (T) getSession().load(getPersistentClass(), id);
  
  return entity;
 }

 @SuppressWarnings("unchecked")
 public T getById(ID id, boolean lock)
 {
  T entity;
  if (lock)
   entity = (T) getSession().get(getPersistentClass(), id, LockMode.UPGRADE);
  else
   entity = (T) getSession().get(getPersistentClass(), id);
  
  return entity;
 }

 @SuppressWarnings("unchecked")
 public List<T> findByExample(T exampleInstance, String... excludeProperty)
 {
  Criteria crit = getSession().createCriteria(getPersistentClass());
  Example example = Example.create(exampleInstance);
  for (String exclude : excludeProperty)
  {
   example.excludeProperty(exclude);
  }
  crit.add(example);
  
  return crit.list();
 }
 
 public void flush()
 {
  getSession().flush();
 }

 public T save(T entity)
 {
  getSession().save(entity);
  return entity;
 }

 public void update(T entity)
 {
  getSession().update(entity);
 }

 public void delete(T entity)
 {
  getSession().delete(entity);
 }
 
 public void deleteFlag(T entity)
 {
  try {
   Field deleted = (Field) entity.getClass().getDeclaredField("deleted");
   if (deleted !=null) {
    deleted.set(entity, new Integer(1));
   }
  } catch (Exception e) {
   // TODO Auto-generated catch block
   log.debug("error ==" + e.toString());
   e.printStackTrace();
  }
  getSession().update(entity);
 } 
}
Dan setelah itu kita buat File DAO untuk Item
File : ItemDAO.java
package com.samz.dao;

import java.util.List;
import com.samz.bean.Item;

public interface ItemDAO  extends GenericDAO<Item, String>{ 
 List<Item> search(List<Object> columnList, List<Object> valueList); 
}

File : ItemDAOHibernate.java
package com.samz.dao;

import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import com.samz.bean.Item;

public class ItemDAOHibernate extends GenericDAOHibernate<Item, String>
  implements ItemDAO {

 @SuppressWarnings("unchecked")
 @Override
 public List<Item> search(List<Object> columnList, List<Object> valueList) {
  int columnSize = 0;
  int valueSize = 0;

  if (columnList != null)
   columnSize = columnList.size();
  if (valueList != null)
   valueSize = valueList.size();

  if (columnSize != valueSize)
   throw new HibernateException(
     "Number of 'column' must be equals with number of 'value'");

  Criteria criteria = getSession().createCriteria(Item.class);

  for (int i = 0; i < columnSize; i++)
   criteria.add(Restrictions.ilike((String) columnList.get(i), "%"
     + valueList.get(i) + "%"));
  criteria.add(Restrictions.eq("deleted", new Integer(0)));
  criteria.addOrder(Order.asc("itemName"));

  return criteria.list();
 }

}
Seperti sudah dijelaskan diatas kita buat file super class untuk DAO (GenericDAO dan Generic DAOHibenate) untuk menggeneralisasikan methode jadi kita tidak perlu membuat save, delete, update di child kelasnya. Membuat file untuk menampung file – file DAO, disinilah sepertinya konsep menggunakan design pattern singleton, kita lihat saja contohnya File : DAOFactory.java
package com.samz.dao;

public abstract class DAOFactory {
 /**
  * Factory method for instantiation of concrete factories.
  */
 @SuppressWarnings("unchecked")
 public static DAOFactory instance(Class factory) {
  try {
   return (DAOFactory) factory.newInstance();
  } catch (Exception e) {
   throw new RuntimeException("Couldn't create DAOFactory: " + factory);
  }
 }

 // For DAO Interface List
 public abstract ItemDAO getItemDAO();

}
Implemementasikan file Interfacenya File : DAOFActoryHibernate.java
package com.samz.dao;

public class DAOFactoryHibernate extends DAOFactory {
 @SuppressWarnings("unchecked")
 private GenericDAOHibernate instantiateDAO(Class daoClass) {
  try {
   GenericDAOHibernate dao = (GenericDAOHibernate) daoClass
     .newInstance();
   return dao;
  } catch (Exception e) {
   System.out.println(e.toString());
   throw new RuntimeException("Can not instantiate DAO: " + daoClass,
     e);
  }
 }

 @Override
 public ItemDAO getItemDAO() {
  return (ItemDAO) instantiateDAO(ItemDAOHibernate.class);
 }

}
Bagaimana cara menggunakannya?? ini nanti akan digunakan di Controller semua logic bisnis akan kita buat di Controller mulai dari list, save, update dan delete, sebelum membuat controller kita akan membuat tampilannya(jsp), yuk dilihat.. File : item.jsp di folder WebContent/jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
 pageEncoding="ISO-8859-1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@ taglib uri="/WEB-INF/tld/struts-html.tld" prefix="html"%>
<%@ taglib uri="/WEB-INF/tld/struts-bean.tld" prefix="bean"%>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%>

<html:html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<meta http-equiv="Content-Style-Type" content="text/css">
<title><bean:message key="app.title" /></title>
</head>

<script src="../script/common.js"></script>
<script language="JavaScript">
 function add()
 {
  document.forms[0].dispatch.value = 'initialAdd';
  document.forms[0].submit();
 }
 
 function edit(_itemCode)
 {
  document.forms[0].dispatch.value = 'initialUpdate';
  document.forms[0].id.value = _itemCode;
  document.forms[0].submit();
 }

 function del(_itemCode)
 {
  document.forms[0].dispatch.value = 'delete';
  document.forms[0].id.value = _itemCode;
  document.forms[0].submit();
 }

</script>

<body>
<table width="100%">
 <!-- Screen Title Section (Start) -->
 <tr>
  <td><bean:message key="form.item.title" /></td>
 </tr>
 <!-- Screen Title Section (Finish) -->

 <!-- Content Section (Start) -->
 <tr>
  <td>
  <table width="100%">
   <tr>
    <td><html:form action="/jsp/item.do">
     <html:hidden property="dispatch" value="search" />
     <html:hidden property="id" />
     <table width="100%">
      <tr>
       <td width="25%"><bean:message key="form.search" /></td>
       <td width=""><html:select property="searchColumn">
       <html:options collection="searchOptionList" property="value" labelProperty="label" />
       </html:select> <html:text property="searchValue" maxlength="32" size="32" /> <html:submit
        property="saveButton" styleClass="formButton">
        <bean:message key="button.search" />
       </html:submit></td>
      </tr>
     </table>
    </html:form></td>
   </tr>

   <tr>
    <td>
    <table width="100%" cellpadding="3" cellspacing="0" border="1">
     <tr class="tableHeader">
      <td width="" align="center"><bean:message
       key="form.item.code" /></td>
      <td width="" align="center"><bean:message
       key="form.item.name" /></td>
      <td width="" align="center"><bean:message
       key="form.item.note" /></td>
      <td width="" align="center"><bean:message key="form.action" /></td>
     </tr>

     
     <c:forEach var="item" items="${items}" varStatus="status">

      <td><c:out value="${item.id}" /></td>
      <td><c:out value="${item.itemName}" /></td>
      <td><c:out value="${item.note}" /></td>
      <td class="cellBorder" align="center"><a
       href="javascript:edit('<c:out value="${item.id}"/>')"><bean:message
       key="form.edit" /></a> | <a
       href="javascript:del('<c:out value="${item.id}"/>')"><bean:message
       key="form.delete" /></a></td>
      </tr>
     </c:forEach>
    </table>
    </td>
   </tr>
  </table>
  </td>
 </tr>
 <!-- Content Section (Finish) -->

 <!-- Button Section (Start) -->
 <tr>
  <td align="left"><html:button property="addButton"
   styleClass="formButton" onclick="javascript: add();">
   <bean:message key="form.add" />
  </html:button></td>
 </tr>
 <!-- Button Section (Finish) -->
</table>
</body>
</html:html>
File : itemAdd.jsp di folder WebContent/jsp
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@ taglib uri="/WEB-INF/tld/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/tld/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/tld/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>

<html:html>
<head>
 <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" %>
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <title><bean:message key="app.title" /></title>
</head>

<script src="../script/validator.js"></script>
<script language="JavaScript">
 function cancel()
 {
  _dispatch = 'cancelAdd';
  window.location = '<c:url value="/jsp/item.do" />'+'?dispatch='+_dispatch;
 }

 function update()
 {
  if(document.forms[0].itemCode.value=="")
  {
   alert("please complete this form");
   document.forms[0].itemCode.focus();
   return false;
  }
  if(document.forms[0].itemName.value=="")
  {
   alert("please complete this form");
   document.forms[0].itemName.focus();
   return false;
  }
  
  document.forms[0].dispatch.value = 'saveUpdate';
  document.forms[0].submit();
 }
 
 function validateForm(form) {
  if(document.forms[0].itemCode.value=="")
  {
   alert("please complete this form");
   document.forms[0].itemCode.focus();
   return false;
  }
  if(document.forms[0].itemName.value=="")
  {
   alert("please complete this form");
   document.forms[0].itemName.focus();
   return false;
  }
 }
</script>

<body>
<html:form action="/jsp/item.do" onsubmit="return validateForm(this);">
<table width="100%">
<!-- Screen Title Section (Start) -->
<tr>
 <td class="pageTitle"><bean:message key="form.item.title" /></td>
</tr>
<!-- Screen Title Section (Finish) -->

<!-- Content Section (Start) -->

<tr>
 <td>
 <tbody>
  <html:hidden property="processName" />
  <html:hidden property="dispatch" value="saveAdd" />
  <table width="100%">
   <tr>
    <td class="cellLabel" width="25%">
     <bean:message key="form.item.code" />
    </td>
    <td class="cellText" width="">
    <logic:equal name="itemForm" property="processName" value="add">
     <html:text property="itemCode" maxlength="16" size="16" />
    </logic:equal>
    <logic:equal name="itemForm" property="processName" value="update">
     <html:text property="itemCode" maxlength="16" size="16" readonly="true" styleClass="formReadOnly" />
    </logic:equal>
    </td>
   </tr>
   <tr>
    <td class="cellLabel">
     <bean:message key="form.item.name" />
    </td>
    <td class="cellText">
     <html:text property="itemName" maxlength="36" size="36" />
    </td>
   </tr>
   <tr>
    <td class="cellLabel">
     <bean:message key="form.item.note" />
    </td>
    <td class="cellText">
     <html:textarea property="note" cols="32" rows="4" ></html:textarea>
    </td>
   </tr>
  </table>
 </tbody>
 </td>
</tr>
<!-- Content Section (Finish) -->

<!-- Button Section (Start) -->
<tr>
 <td align="left">
 <logic:equal name="itemForm" property="processName" value="add">
  <html:submit property="saveButton" styleClass="formButton">
   <bean:message key="button.save" />
  </html:submit>
 </logic:equal>
 <logic:equal name="itemForm" property="processName" value="update">
  <html:button property="saveButton" styleClass="formButton" onclick="javascript:update();">
   <bean:message key="button.save" />
  </html:button>
 </logic:equal>
  <html:button property="cancelButton" styleClass="formButton" onclick="javascript:cancel();">
   <bean:message key="button.cancel" />
  </html:button>
 </td>
</tr>

<!-- Button Section (Finish) -->
</table>
</html:form>
</body>
</html:html> 
Dari kedua file jsp diatas dapat kita lihat berbagai macam tag di jsp, kita juga disini menggunakan JSTL (JavaServer Pages Standard Tag Library), untuk tutorial JSTL dapat searching di google dengan key jstl atau dapat dilihat linknya disini  Dapat dilihat juga ada tag seperti <bean:message key="form.item.code">maksudnya adalah kita ambil key dengan nama form.item.code dari file properties, dalam tutorial ini nanti kita beri nama SamzResources.properties. kenapa harus pakai file properties? kenapa ga langsung di hardcode saja? inilah fungsinya agar mencegah dari coding kotor atau hardcode dan juga agar nanti web kita dapat diganti ke berbagai bahasa seperti Inggris, Belanda, dll sesuai default language dari browser kita. inilah contoh isi file propertiesnya
form.action=Aksi
form.add=Tambah
Untuk menambahkan ke bahasa Inggris buat satu file properties lagi dengan nama SamzResources_en.properties
form.action=Action
form.add=Add
Untuk bisa terhubung file properties ini dengan jsp, kita harus mendaftarkan di strust-config, beri nama struts-config.xml di folder /WEB-INF. Disinilah fungsi struts, sebagai penghubung antara view(jsp) dengan controller, view dengan file properties. property yang ada di jsp didaftarkan di file struts ini, kita lihat contohnya :
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE struts-config PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
        "http://struts.apache.org/dtds/struts-config_1_3.dtd">

<struts-config>
    <form-beans>
  <form-bean name="itemForm" type="org.apache.struts.validator.DynaValidatorForm">
   <form-property name="dispatch" type="java.lang.String"></form-property>
   <form-property name="id" type="java.lang.String"></form-property>
   <form-property name="searchColumn" type="java.lang.String"></form-property>
   <form-property name="searchValue" type="java.lang.String"></form-property>
   <form-property name="processName" type="java.lang.String"></form-property>   
   <form-property name="itemCode" type="java.lang.String"></form-property>
   <form-property name="itemName" type="java.lang.String"></form-property>
   <form-property name="note" type="java.lang.String"></form-property>
  </form-bean>
    </form-beans> 

    <action-mappings>
      <action path="/jsp/item" name="itemForm" parameter="dispatch" type="com.samz.controller.ItemController" scope="request" validate="false">
   <forward name="listScreen" path="/jsp/item.jsp"></forward>
   <forward name="addScreen" path="/jsp/itemAdd.jsp"></forward>
  </action>
    </action-mappings>    
    <message-resources parameter="com.samz.resources.SamzResources"></message-resources>
</struts-config>

Terakhir buat controller, dimana file inilah yang menangani semua logic bisnis, tak usah panjang - panjang kita langsung lihat contohnya File : ItemController.java
package com.samz.controller;

import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.log4j.Logger;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;
import org.apache.struts.action.DynaActionForm;
import org.apache.struts.util.LabelValueBean;

import com.samz.bean.Item;
import com.samz.dao.DAOFactory;
import com.samz.dao.DAOFactoryHibernate;
import com.samz.dao.ItemDAO;
import com.samz.utility.HibernateSessionConversationFilter;

public class ItemController extends GeneralController {

 private static Logger log = Logger.getLogger(ItemController.class);
 DAOFactory factory = DAOFactory.instance(DAOFactoryHibernate.class);
 ItemDAO itemDAO = factory.getItemDAO();

 private void searchOption(HttpServletRequest request) throws Exception {
  List<labelvaluebean> searchOption = null;
  searchOption = new ArrayList<labelvaluebean>();
  searchOption.add(new LabelValueBean(getMessage(request,
    "form.item.name"), "itemName"));
  searchOption.add(new LabelValueBean(getMessage(request,
    "form.item.code"), "id"));
  request.setAttribute("searchOptionList", searchOption);
 }

public ActionForward initialList(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response)
   throws Exception {
  ActionForward forward = null;
  DynaActionForm dynaForm = null;
  String searchColumn = null;
  String searchValue = null;
  List<Object> columnList = null;
  List<Object> valueList = null;
  List<Item> items = null;
  dynaForm = (DynaActionForm) form;

  if (((searchValue = (String) dynaForm.get("searchValue")) != null && !searchValue
    .trim().equals(""))
    || ((searchValue = (String) request.getAttribute("searchValue")) != null && !searchValue
      .trim().equals(""))) {
   searchColumn = (String) dynaForm.get("searchColumn");
   columnList = new ArrayList<Object>();
   valueList = new ArrayList<Object>();
   columnList.add(searchColumn);
   valueList.add(searchValue.trim());
  }
  items = itemDAO.search(columnList, valueList);
  request.setAttribute("items", items);
  request.setAttribute(
    HibernateSessionConversationFilter.END_OF_CONVERSATION_FLAG,
    "1");
  searchOption(request);
  forward = mapping.findForward("listScreen");

  return forward;
 }
public ActionForward initialAdd(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response)
   throws Exception {
  ActionForward forward = null;
  DynaActionForm dynaForm = null;
  log.info("[initialAdd start >>>");
  dynaForm = (DynaActionForm) form;
  dynaForm.set("processName", "add");
  forward = mapping.findForward("addScreen");
  log.info("<<< initialAdd finish]");
  return forward;
 }

 /**
  * Method invoked when [Cancel] button press in 'Item - Add / Update' screen
  */
 public ActionForward cancelAdd(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response)
   throws Exception {
  log.info("[cancelAdd start >>>");
  ActionForward forward = initialList(mapping, form, request, response);
  log.info("<<< cancelAdd finish]");
  return forward;
 }

 /**
  * Method invoked when [Save] button press in 'Item - Add / Update' screen
  */
 public ActionForward saveAdd(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response)
   throws Exception {
  ActionForward forward = null;
  Item item = null;
  DynaActionForm dynaForm = null;
  ActionMessages errors = null;
  log.info("[saveAdd start >>>");
  try {
   dynaForm = (DynaActionForm) form;
   item = new Item();
   item.setId(dynaForm.getString("itemCode"));
   item.setItemName(dynaForm.getString("itemName"));
   item.setNote(dynaForm.getString("note"));
   item.setCreatedBy("admin");
   item.setCreatedDate(new Timestamp(System.currentTimeMillis()));
   item.setDeleted(new Integer(0));
   itemDAO.save(item);
   request
     .setAttribute(
       HibernateSessionConversationFilter.END_OF_CONVERSATION_FLAG,
       "1");
   itemDAO.flush();
   searchOption(request);

  } catch (Exception ex) {
   errors = new ActionMessages();
   errors.add("ERROR", new ActionMessage("error.exception", ex
     .getMessage()));
   saveErrors(request, errors);
   request
     .setAttribute(
       HibernateSessionConversationFilter.ROLLBACK_OF_CONVERSATION_FLAG,
       "1");
   forward = mapping.findForward("failScreen");
  }
  log.info("<<< saveAdd finish]");
  forward = initialList(mapping, form, request, response);
  return forward;
 }

 /**
  * Method invoked when [Edit] link for specific Item press in 'Role' screen
  */
 public ActionForward initialUpdate(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response)
   throws Exception {
  ActionForward forward = null;
  DynaActionForm dynaForm = null;
  Item itemEntity = null;
  String itemCode = null;
  log.info("[initialUpdate start >>>");
  itemCode = request.getParameter("id");
  itemEntity = itemDAO.findById(itemCode, false);
  dynaForm = (DynaActionForm) form;
  BeanUtils.copyProperties(dynaForm, itemEntity);
  dynaForm.set("itemCode", itemEntity.getId());
  dynaForm.set("processName", "update");

  forward = mapping.findForward("addScreen");
  log.info("<<< initialUpdate finish]");
  return forward;
 }

 /**
  * Method invoked when [Save] button press in 'Item - Add / Update' screen
  */
 public ActionForward saveUpdate(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response)
   throws Exception {
  ActionForward forward = null;
  Item item = null;
  DynaActionForm dynaForm = null;
  String itemCode = null;
  log.info("[Update start >>>");
  dynaForm = (DynaActionForm) form;
  itemCode = (String) dynaForm.get("itemCode");
  item = itemDAO.findById(itemCode, false);
  item.setItemName(dynaForm.getString("itemName"));
  item.setNote(dynaForm.getString("note"));
  item.setLastUpdated(new Timestamp(System.currentTimeMillis()));
  item.setLastUpdatedBy("admin");
  itemDAO.flush();
  searchOption(request);
  forward = initialList(mapping, form, request, response);
  log.info("<<< Update finish]");

  return forward;
 }

 /**
  * Method invoked when [Delete] link for specific Item press in 'Item'
  * screen
  */
 public ActionForward delete(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response)
   throws Exception {
  ActionForward forward = null;
  Item itemEntity = null;

  itemEntity = itemDAO.findById(request.getParameter("id"), false);
  itemEntity.setDeleted(new Integer(1));
  itemEntity.setLastUpdated(new Timestamp(System.currentTimeMillis()));
  itemEntity.setLastUpdatedBy("admin");
  itemDAO.update(itemEntity);
  itemDAO.flush();

  searchOption(request);
  forward = initialList(mapping, form, request, response);

  return forward;
 }

 /**
  * Method invoked when [Search] button press in 'Item' screen
  */
 public ActionForward search(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response)
   throws Exception {
  ActionForward forward = initialList(mapping, form, request, response);
  return forward;
 }
}
Download source code lengkap disini
Kunjungi situs kami di PT Samz Solution

1 komentar: