Jasper Report

Hay hay... Mau posting nii.. Hari ini saya mau posting cara untuk membuat jasper report. Seperti membuat report
di microsoft access. Sudahlah tak usah berbelit-belit.. Langsung saja saya perlihatkan source code nya.
Anda harus membuat class MyIo terlebih dahulu.

package id.go.kemenkeu.simple.kwitansi.action;

import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.security.CodeSource;
import java.security.ProtectionDomain;

import org.blueoxygen.cimande.CimandeAction;

public class MyIo extends CimandeAction{
public static File getBaseFolder() throws IOException {
ProtectionDomain domain = MyIo.class.getProtectionDomain();
CodeSource source = domain.getCodeSource();
URL url = source.getLocation();

if (!"file".equals(url.getProtocol())){
throw new IOException("Code source location not a file:" + url);
}

String path = url.getPath().replaceAll(" ", " ");
return (new File(path.substring(0, path.lastIndexOf("/WEB-INF/"))));
}

}

Setelah itu anda buat class cetak. Class ini menentukan mau disimpan dalam bentuk apakah report anda nanti.
Apakah berbentuk .pdf atau .odt. Untuk contoh saya akan berikan untuk yang mencetak .pdf.

package id.go.kemenkeu.simple.kwitansi.action;

import java.io.File;
import java.io.OutputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.HashMap;

import javax.swing.JOptionPane;

import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.export.JRPdfExporter;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.view.JasperViewer;

import org.blueoxygen.cimande.CimandeAction;

public class Cetak extends CimandeAction{
String id;
public String execute() {

try {
String outPath = MyIo.getBaseFolder().getPath();
File file = new File(outPath + "/folderJasper/" + "kwitansi"
+ ".jasper");

/*
* Buat koneksi yang sama seperti pada report
*/

String url = "jdbc:mysql://localhost:3306/keuLagi";
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection(url, "root", "");
// Connection con = datasource.getConnection();

if (con != null) {

System.out.println("koneksi " + con);
} else {
System.out.print("tidak konek");
}

HashMap parameters=new HashMap();
parameters.put("ID", id);





JasperReport jasperReport = (JasperReport) JRLoader
.loadObject(file);
JasperPrint jasperPrint = JasperFillManager.fillReport(
jasperReport, parameters, con);
JasperViewer.viewReport(jasperPrint, false);

OutputStream outputStream = null;

JRLoader.loadObject(file);
JRPdfExporter pdfExporter = new JRPdfExporter();
pdfExporter.setParameter(JRExporterParameter.JASPER_PRINT,
jasperPrint);
pdfExporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME,
outPath + "/pdf/" + "kwitansi" + ".pdf");

System.out.println("Exporting report...");
System.out.println("Xls report Done!");
pdfExporter.exportReport();
System.out.println("Done!");
System.out.println("Html Report Done");

} catch (Exception e) {
String connectMsg = "Could not create the report " + e.getMessage()
+ " " + e.getLocalizedMessage();
System.out.println("\n" + "\n" + connectMsg);
return ERROR;
}

return SUCCESS;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}

}

O iya maaf. Saya lupa. Sebelum anda memberikan source code yang tadi, anda harus mempunyai IReport.
Ini digunakan untuk mendesign report yang akan anda tampilkan.

Selamat Mencoba...

 

Date???

Gimana caranya yaa menampilkan kalender di dalam program lebih dari satu??
Ternyata mudah..
Saya sudah coba dan ini source code nya..

<html>
<head>
<title>Project Activity</title>
<link type="text/css" rel="stylesheet" href="#surl("value=/style.css")"/>
<style type="text/css">@import url("style.css");</style>
<link rel="stylesheet" type="text/css" media="all" href="../../jscalendar-1.0/calendar-win2k-cold-2.css" title="win2k-cold-1" />
<script type="text/javascript" src="../../jscalendar-1.0/calendar.js"></script>
<script type="text/javascript" src="../../jscalendar-1.0/lang/calendar-en.js"></script>
<script type="text/javascript" src="../../jscalendar-1.0/calendar-setup.js"></script>
</head>
<body>
<link rel="stylesheet" href='../../css/jscalendar-1.0/calendar-djkn-simple2008.css' type="text/css">
<link rel="stylesheet" href='../../css/jstabs.css' type="text/css">
<link rel="stylesheet" href='../../css/form.css' type="text/css">
<link rel="stylesheet" href='../../css/menu.css' type="text/css">
<script src="../../jscript/simple_ajax.js"></script>
<script src="../../jscript/jscalendar-1.0/calendar.js"></script>
<script src="../../jscript/jscalendar-1.0/lang/calendar-ina.js"></script>
<script src="../../jscript/jscalendar-1.0/calendar-setup.js"></script>
<script src="../../jscript/jstabs.js"></script>
<script src="../../jscript/currency.js"></script>
<script src="../../jscript/prototype.js"></script>
<script src="../../jscript/rico.js"></script>
<script>
function calendarSetup(textFieldID,btnID) {
Calendar.setup ({inputField:textFieldID,ifFormat:"%d-%m-%Y",button:btnID});
}
function genRandom(){
var dt = new Date();
var result = Math.floor(Math.random( ) * (dt.getTime()));
return result;
}
function enlargeScreen(){

}
function normalScreen(){
}
</script>

<style type="text/css">
<!--
.style9 {
font-size: 14px;
font-family: Arial, Helvetica, sans-serif;
}
.style10 {font-size: 12px}
.style11 {font-family: Arial, Helvetica, sans-serif}
-->
</style>
<form method="post" action="save.action">
<table width="100%" border="0" cellpadding="2" cellspacing="2" bgcolor="#d0dcff">
<tr bgcolor="#d0dcff">
<td colspan="2" bgcolor="#d0dcff">
<img src="../../images/silk/wrench.png" border="0">&nbsp;
<strong>Add Project</strong>
</td>
</tr>
<tr bgcolor="#ffffff">
<td height="427" colspan="2" bgcolor="#FFFFFF">
<table width="100%" border="0">
<tr>
<td colspan="4">
#if (!$actionErrors.isEmpty())
<div class="errorMessage">Errors</div>
<ul class="errorMessage">
#foreach( $error in $actionErrors )
<li>$error</li>
#end
</ul>
#end
</td>
</tr>
<tr>
<td width="14%">
<div align="right"><strong><font color="red">*</font> Assigner : </strong></div>
</td>
<td colspan="3">
<input name="textfield" type="textfield" id="userName" onfocus="this.blur()" value="$!project.assigner.username" size="15" readonly="true" />
<input id="userId" name="userId" value="$!project.assigner.id" type="hidden">
<input value="View" onclick="javascript:window.open('listuser.action?name=user','cats','scrollbars=yes,status=no,width=300,height=300')" type="button"> </td>
</tr>
<tr>
<td>
<div align="right"><strong><font color="red">*</font> Name : </strong></div>
</td>
<td colspan="3">
<input maxlength="128" name="project.name" size="30" value="$!project.name">
</td>
</tr>
<tr>
<td>
<div align="right"><strong><font color="red">*</font> Description : </strong></div>
</td>
<td colspan="3">
<input maxlength="128" name="project.description" size="30" value="$!project.description">
</td>
</tr>
<tr>
<td>
<div align="right"><strong><font color="red">*</font> Manager : </strong></div>
</td>
<td colspan="3">
<input id="managerName" value="$!project.manager.username" size="15" readonly="true" onfocus="this.blur()" type="textfield">
<input id="managerId" name="managerId" value="$!project.manager.id" type="hidden">
<input value="View" onclick="javascript:window.open('listuser.action?name=manager','cats','scrollbars=yes,status=no,width=300,height=300')" type="button">
</td>
</tr>
<tr>
<td>
<div align="right"><strong><font color="red">*</font> Company : </strong></div>
</td>
<td colspan="3">
<input id="perusahaanName" value="$!project.company.name" size="15" readonly="true" onfocus="this.blur()" type="textfield">
<input id="companyId" name="companyId" value="$!project.company.id" type="hidden">
<input value="View" onclick="javascript:window.open('listcompany.action','cats','scrollbars=yes,status=no,width=300,height=300')" type="button"> </td>
</tr>
<tr>
<td>
<div align="right"><strong>Code : </strong></div>
</td>
<td colspan="3">
<input maxlength="12" name="project.code" size="30" value="$!project.code">
</td>
</tr>
<tr>
<td>
<div align="right"><strong>Background : </strong></div></td>
<td colspan="3">
<textarea rows="2" name="project.background" cols="50">$!project.background</textarea>
</td>
</tr>
<tr>
<td>
<div align="right"><strong>Objective :</strong></div>
</td>
<td colspan="3">
<input maxlength="128" name="project.objective" size="30" value="$!project.objective">
</td>
</tr>
<tr>
<td>
<div align="right"><strong>Start Date : </strong></div>
</td>
<td colspan="3">
<input type="text" name="project.startDate" value="$!project.startDate" size="15" id="f_date_a" readonly="1">
<img src="../../images/img.gif" id="f_trigger_a" style="cursor: pointer; border: 1px solid red;" title="Start Date" onmouseover="this.style.background='red';" onmouseout="this.style.background=''"/>
</td>
</tr>
<tr>
<td>
<div align="right"><strong>Finish Date :</strong></div>
</td>
<td colspan="3">
<input type="text" name="project.finishDate" value="$!project.finishDate" size="15" id="f_date_b" readonly="1">
<img src="../../images/img.gif" id="f_trigger_b" style="cursor: pointer; border: 1px solid red;" title="Finish Date" onmouseover="this.style.background='red';" onmouseout="this.style.background=''"/>
</td>
</tr>
<tr>
<td>
<div align="right"><strong>Priority :</strong></div>
</td>
<td colspan="3">
<input maxlength="28" name="project.priority" size="30" value="$!project.priority"></td>
</tr>
<tr>
<td>
<div align="right"><strong>Progres : </strong></div></td>
<td colspan="3">
<input name="project.progressPresentage" size="4" value="$!project.progressPresentage"> %</td>
</tr>
<tr>
<td>
<div align="right"><strong>Critical Project :</strong></div>
</td>
<td colspan="3">
<input name="project.criticalProject" value="1" type="radio"> Yes
<input name="project.criticalProject" value="0" type="radio"> No</td>
</tr>
<tr>
<td>
<div align="right"><strong>Project Notes : </strong></div>
</td>
<td colspan="3"><textarea rows="2" name="project.projectNotes" cols="50">$!project.projectNotes</textarea></td>
</tr>
<tr>
<td>
<div align="right"><strong>Project Parent :</strong></div>
</td>
<td colspan="3">
<input id="projectName" value="$!project.iparent" size="15" readonly="true" onfocus="this.blur()" type="textfield">
<input id="projectId" name="projectId" value="$!project.iparent" type="hidden">
<input value="View" onclick="javascript:window.open('listproject.action','cats','scrollbars=yes,status=no,width=300,height=300')" type="button"></td>
</tr>
<tr>
<td>
<div align="right"><strong>Status :</strong></div>
</td>
<td colspan="3">
<select name="project.projectStatus">
<option value="0"> Uncomplete </option>
</select>
</td>
</tr>
<tr>
<td>
<div align="right"><strong>Category : </strong></div>
</td>
<td colspan="3">
<select name="projectCategory.id">
#foreach($c in $projectCategories)
<option value="$!c.id" #if($c.id == $!project.projectCategory.id) selected #end>
$!c.description
</option>
#end
</select>
</td>
</tr>
<tr>
<td>
<div align="right"><strong>Priority Type :</strong></div>
</td>
<td colspan="3">
<select name="projectPriorityType.id">
#foreach($p in $projectPriorityTypes)
<option value="$!p.id" #if($p.id == $!project.projectPriorityType.id) selected #end>
$!p.name
</option>
#end
</select>
</td>
</tr>
<tr>
<td>&nbsp;</td>
<td width="44%">&nbsp;</td>
<td width="5%">&nbsp;</td>
<td width="37%">&nbsp;</td>
</tr>
<tr>
<td colspan="4">
<font color="red">*</font> <i>Not Null </i>
</td>
</tr>
</table>
<hr />
<input type="submit" value="Update"/>
<input type="hidden" name="project.id" value="$!project.id"/>
</td>
</tr>
</table>
</form>
<script type="text/javascript">
Calendar.setup({
inputField : "f_date_a", // id of the input field
ifFormat : "%d/%m/%Y", // format of the input field
showsTime : false, // will display a time selector
button : "f_trigger_a", // trigger for the calendar (button ID)
singleClick : true, // double-click mode
step : 1 // show all years in drop-down boxes (instead of every other year as default)
});
</script>
<script type="text/javascript">
Calendar.setup({
inputField : "f_date_b", // id of the input field
ifFormat : "%d/%m/%Y", // format of the input field
showsTime : false, // will display a time selector
button : "f_trigger_b", // trigger for the calendar (button ID)
singleClick : true, // double-click mode
step : 1 // show all years in drop-down boxes (instead of every other year as default)
});
</script>
<script>
calendarSetup("f_date_a","f_trigger_a");
calendarSetup("f_date_b","f_trigger_b");
</script>
</body>
</html>


button

Ketika di klik button merah itu akan keluar gambar kalender seperti di bawah ini
tgl1

tgl2

Dan hasilnya seperti ini..
hasil

Selamat mencoba...

Nomor Urut

Nomor Urut A'oOo..... Dah lama gak posting. Hhu.... ;(
Mau posting apa yah??? Jadi lupa..
O ia.. Setelah aku mengerjakan project Blueoxygen Ramen kemarin, aku ngerjain project
dari Departemen Keuangan. Pertama saya kaget. Padahal Ramen masih belum selesai
seutuhnya. Tapi ya sudahlah.. Sudah di percaya kok,, masa' gak mau..
Gara-gara kerjaan ini aku jadi dapet tambahan ilmu.. Yaitu cara nampilin nomor secara otomatis
ada dan langsung urut.
Ini nih codingannya..

package com.depkeu.simple.kwitansi.action;

import java.util.ArrayList;
import java.util.List;

import org.blueoxygen.cimande.CimandeAction;
import org.blueoxygen.cimande.persistence.PersistenceManager;
import org.blueoxygen.cimande.persistence.hibernate.HibernateSessionFactory;
import org.blueoxygen.cimande.persistence.hibernate.HibernateSessionFactoryAware;
import org.blueoxygen.cimande.security.SessionCredentials;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Projections;

import com.depkeu.simple.entity.Kwitansi;
import com.depkeu.simple.entity.KwitansiHasilBersihLelang;

public class FormKwi extends CimandeAction{
protected PersistenceManager manager;
protected SessionCredentials sessionCredentials;
private Kwitansi kwitansi= new Kwitansi();
private List<Kwitansi> kwitansis = new ArrayList<Kwitansi>();
protected HibernateSessionFactory hsf;
protected Session sess;

protected int no=0;

public String execute() {
sess=hsf.createSession();
Criteria crit=hsf.createSession().createCriteria(Kwitansi.class);
crit.setProjection(Projections.rowCount());
no=Integer.parseInt(crit.uniqueResult().toString());
no=no+1;

if (getKwitansi().getId() != null
&& !"".equalsIgnoreCase(getKwitansi().getId().trim())) {
setKwitansi((Kwitansi) manager.getById(Kwitansi.class, getKwitansi().getId()));
}
return SUCCESS;
}

public void setPersistenceManager(PersistenceManager persistenceManager) {
this.manager = persistenceManager;
}

public void setSessionCredentials(SessionCredentials sessionCredentials) {
this.sessionCredentials = sessionCredentials;
}

public Kwitansi getKwitansi() {
return kwitansi;
}

public void setKwitansi(Kwitansi kwitansi) {
this.kwitansi = kwitansi;
}

public List<Kwitansi> getKwitansis() {
return kwitansis;
}

public void setKwitansis(List<Kwitansi> kwitansis) {
this.kwitansis = kwitansis;
}

public PersistenceManager getManager() {
return manager;
}

public void setManager(PersistenceManager manager) {
this.manager = manager;
}

public HibernateSessionFactory getHsf() {
return hsf;
}

public void setHsf(HibernateSessionFactory hsf) {
this.hsf = hsf;
}

public Session getSess() {
return sess;
}

public void setSess(Session sess) {
this.sess = sess;
}

public int getNo() {
return no;
}

public void setNo(int no) {
this.no = no;
}

public SessionCredentials getSessionCredentials() {
return sessionCredentials;
}

}


Nah, code ini dituliskan di class Save.java.
Code ini berguna untuk mengenerate nomor yang akan di tampilkan pada form secara urut.
Ini aja dulu yah..
Semoga bermanfaat..

Blueoxygen Ramen

Ramen

Blueoxygen Ramen. Itu adalah project yang sekarang ini saya kerjakan. Project ini masih berbentuk Cimande1. Capek dech.....
Kemarin udah ngerjain project pakai Cimande2, eh sekarang balik ke Cimande1 lagi . Udah agak lupa ma cara kerjanya. Hhagz...
harus import database dulu, bikin descriptor, module function, site, wf role, role manager, role privillage, role site privillage dan
yang terakhir user manager. Lalu log out. Di Cimande2 tidak ada proses seperti ini. O ia masih ada lagi. Sebelum run project kita
harus run build.xml terlebih dahulu, lalu export jar, baru dech run project. Sungguh merepotkan ;( .

Kembali lagi ke project Blueoxygen Ramen. Setelah saya checkout project ini, lalu saya run, isinya adalah seperti ini.

Tampilan

Benar kan?? Begitu banyak folder. Bingung saya mulai darimana project ini dijalankan. Apakah dari add category, add DAP (DocAttachmentProject),
add DAT (DocAttachment Task), add member project, add priority type atau add task project. Yang pasti, ini project masih banyak error nya.
Terutama di search add member dan search comment. Huft....


Liburan di Kota Kealahiran

Untitled Document

Hari pertama aku sampai di Malang, aku masih belum begitu percaya. Apakah benar aku sudah berada di Malang?
Ketikka itu hari masih begitu pagi. Karena masih menunjukkan pukul 04.35 WIB. Sampai akhirnya aku merasakan
hawa sejuk, bahkan bisa di katakan dingin karena sudah terbiasa dengan hawa panas di depok. Aku sangat
merasa senang. Aku telah berada di kota kelahiran aku, yaitu Malang. Walaupun baru 2bulan meninggalkan kota
ini, tapi aku sudah sangat merindukannya. Hawa sejuknya, indah pemandangannya, makanan khasnya,
sampai orangnya yang ramah-tamah. Karena di depok sudah jarang di temukan suasana seperti ini. Sudah
begitu banyak polusi udara yang menyelimuti kota ini.

Lebih senangnya lagi, aku bertemu dengan dambaan hati yang selalu aku rindukan. Ibu ku. Aku sangat
merindukannya lebih dari apapun. Sampai-sampai air mataku pun menetes, saking kangennya. Begitu besar
pengorbanannya kepada aku. Sampai-sampai beliau menyiapkan kamar aku dengan bagus, rapi, bersih dan harum.
Baliau benar-benar menyempatkan waktu hanya demi kesenangan anaknya. Padahal aku tahu, betapa sibuknya
beliau dengan pekerjaanya. Terima kasih ibu. Engkau selalu memberikan yang terbaik untukku.

Sampai pada akhirnya malam takbiran pun tiba. Entah mengapa, hari ini juga bertepatan dengan hari ulang tahun ibu ku.
Sangat tepat. Semoga engkau selalu di berikan kemurahan hati, ketabahan dan kesabaran dalam menghadapi anak-
anakmu yang semakin hari juga semakin besar. Pasti sangat merepotkan mu ibu. Tapi aku berjanji. Suatu saat nanti
akan ku balas semua pengorbananmu kepada ku dan adikku. Agar kau selalu bahagia dan tersenyum. Maafkan aku ibu.
Karena di hari yang sangat menyenangkan ini, aku masih belum bisa memberikan apa-apa untukmu. Hanya doa yang selalu
ku panjatkan untuk semua kebahagiaanmu ibu. Happy Birthday ibu... Wish you all the best..

Hmmm....saatnya kita makan-makan. Untuk merayakan ulang tahun ibu ku, beliau mengajak kami sekeluarga
makan malam di selorejo. Yaitu makan ikan gurami dan ikan mujaer bakar. Hmm...yummy..sungguh nikmat rasanya.
Di samping merayakan ulang tahun ibu, juga merayakan tanda berakhirnya puasa ramadhan kami. Besok sudah hari
raya Idul Fitri. Betapa senangya hatiku hari itu. Merayakan malam takbiran sekaligus merayakan ulang tahun
ibu ku bersama keluarga. Seronok-seronok-seronok...

Hari raya Iduk Fitri pun tiba. Kami saling bersalam-salaman, sungkem, memohon ampun kepada Allah, meminta
maaf ke semua orang atas segala kesalahan yang telah kami perbuat, entah itu sengaja atau tak sengaja. Semoga semua
amal ibadah kita sebulan ini diterimaNya dan diberikan pengampunan olehNya.
Malamnya setelah kita berkunjung ke rumah saudara-saudara terdekat. Kami kembali bercengkrama di warung
sate ayam Madura di sebelah rumah kami. Sungguh senang hatiku. Karena inilah makanan yang selalu aku nantikan.

Esok harinya, aku ikut ibu ku ke selorejo. Membantunya berjualan ice cream disana. Walaupun agak mengecewakan,
karena pengunjung masih belum begitu banyak dan yang beli pun hanya beberapa. Tetapi aku sangat senang, karena
bisa membantu ibu ku tersayang. Selain itu yang membuatku sangat senang lagi adalah... Ibu ku membelikan ku
bakso. Sungguh bahagianya aku. Karena ini adalah makanan khas malang yang selalu saya rindukan . Bahkan bisa
dibilang kecanduan. Kalau di malang gak makan bakso akan menyesal selamanya. Asal anda tahu. Rasa bakso malang
sangat enak dan memuaskan. Tidak akan rugi jika beli bakso di malang. Betul-betul-betul...

Duwh, gak terasa hari ini adalah hari terakhir aku menginjakkan kaki di kota malang. Hari ini mau balik ke kota depok.
Kembali bekerja di meruvian camp. Begitu cepat waktu berlalu. Mengapa begitu cepat beranjak. Masih belum puas
rasanya berada di tanah air. Semoga perjalanan ku bersama teman-teman nanti berlalu dengan baik dan lancar.
Tak ada sesuatu hal yang membuat kita celaka. Semoga Allah meridhoi perjalanan kami. Amin.....


Coding Tampilan (.jsp)

Untitled Document

Disini saya akan memberilkan coding untuk tampilan (.jsp) pada program yang kemarin saya tuliskan. Kita mulai dari item-add.jsp.

item-add.jsp

<%@taglib prefix="s" uri="/struts-tags"%>
<%@taglib prefix="j" uri="/struts-jquery-tags"%>
<%@taglib prefix="c" uri="/struts-tags"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
<title>Item</title>
<j:head jqueryui="true" loadAtOnce="true" loadFromGoogle="false"
compressed="false" />
</head>
<body>
<s:url id="post" action="item" />
<s:form id="item" action="item" method="post">
<table border="0" cellpadding="3" cellspacing="1" align="center">
<tr>
<td width="100"><s:a action="item">Search</s:a></td>
</tr>
<tr>
<td colspan="2"><s:actionerror /> <s:actionmessage /></td>
</tr>
<tr bgcolor="#d0dcff">
<td colspan="3"><strong>Item</strong></td>
</tr>
<tr bgcolor="#ffffff">
<s:textfield name="code" label="Code" size="30" labelSeparator="" />
</tr>
<tr bgcolor="#ffffff">
<s:textfield name="name" label="Name" size="30" labelSeparator="" />
</tr>
<tr bgcolor="#ffffff">
<s:textfield name="description" label="Description" size="30"
labelSeparator="" />
</tr>
<tr bgcolor="#ffffff">
<s:textfield name="price" label="Price" size="30" labelSeparator="" />
</tr>
<tr bgcolor="#ffffff">
<td>Category</td>

<td>
<select name="item.cate.id">
<option value="$!item.cate.id"></option>
</select>
</td>

</tr>
<tr bgcolor="#ffffff">
<td colspan="2" align="right"><input type="submit"
value="Submit" width="70" /> <input type="reset" value="reset"
width="70" /></td>
</tr>
</table>
</s:form>
</body>
</html>

Lalu kita tambahakan item-detail.jsp

<%@taglib prefix="s" uri="/struts-tags" %>
<%@taglib prefix="j" uri="/struts-jquery-tags" %>

<html>
<head>
<title>Detail Item Data</title>
</head>
<body>
<table bgcolor="#e4e4e4" border="0" cellpadding="3" cellspacing="1" align="center">
<tr>
<td bgcolor="#ffffff" colspan="3"><s:a action="item">Item List</s:a></td>
</tr>
<tr bgcolor="#d0dcff">
<td colspan="1">
<strong>Item Detail</strong> </td>
<td colspan="2"> </td>
</tr>
<tr>
<td bgcolor="#d0dcff" width="100">Code</td>
<td bgcolor="#ffffff">:</td>
<td bgcolor="#ffffff" width="300">${code}</td>
</tr>
<tr>
<td bgcolor="#d0dcff">Name</td>
<td bgcolor="#ffffff">:</td>
<td bgcolor="#ffffff">${name}</td>
</tr>
<tr>
<td bgcolor="#d0dcff">Description</td>
<td bgcolor="#ffffff">:</td>
<td bgcolor="#ffffff"><s:property value="birthDate" />
${description}</td>
</tr>
<tr>
<td bgcolor="#d0dcff">Price</td>
<td bgcolor="#ffffff">:</td>
<td bgcolor="#ffffff">${price}</td>
</tr>
</table>

<br></br>
</body>
</html>

item-edit.jsp

<%@taglib prefix="s" uri="/struts-tags"%>
<%@taglib prefix="j" uri="/struts-jquery-tags"%>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
<title>Item</title>
<j:head jqueryui="true" loadAtOnce="true" loadFromGoogle="false"
compressed="false" />
</head>
<body>
<s:url id="post" action="item" />
<s:form id="item" action="/item/%{id}" method="post">
<s:hidden name="_method" value="PUT" />
<table border="0" cellpadding="3" cellspacing="1" align="center">
<tr>
<td width="100"><s:a action="item">Search</s:a></td>
</tr>
<tr>
<td colspan="2"><s:actionerror /> <s:actionmessage /></td>
</tr>
<tr bgcolor="#d0dcff">
<td colspan="3"><strong>Item</strong></td>
</tr>
<tr bgcolor="#ffffff">
<s:textfield name="code" label="Code" size="30" labelSeparator="" />
</tr>
<tr bgcolor="#ffffff">
<s:textfield name="name" label="Name" size="30" labelSeparator="" />
</tr>
<tr bgcolor="#ffffff">
<s:textfield name="description" label="Description" size="30"
labelSeparator="" />
</tr>
<tr bgcolor="#ffffff">
<s:textfield name="price" label="Price" size="30" labelSeparator="" />
</tr>
<tr bgcolor="#ffffff">
<td>Category</td>
<td><select name="cate.id">
<option value="$!item.cate.id"></option>
</select></td>
</tr>
<tr bgcolor="#ffffff">
<td colspan="2" align="right"><input type="submit"
value="Submit" width="70" /> <input type="reset" value="reset"
width="70" /></td>
</tr>
</table>
</s:form>
</body>
</html>

item-parent-success.jsp

<%@taglib prefix="s" uri="/struts-tags"%>
<s:url id="ids" action="item/%{id}" />
<script>
function onload() {
//alert('${ids}');
window.opener.location.href='${ids}';
window.close();
}
onload();
</script>

Dan yang terakhir adalah item.result

<%@taglib prefix="s" uri="/struts-tags"%>
<%@taglib prefix="j" uri="/struts-jquery-tags"%>
<html>
<head>
<title>View Item Data</title>
</head>
<body>
<table bgcolor="#000000" border="0" cellpadding="3" cellspacing="1"
width="98%">
<tr bgcolor="#d0dcff">
<td width="12%"><strong>Item</strong></td>
<td align="left" colspan="4"><s:url id="result" action="category" />
<a href="${result}">Categories</a></td>
<td colspan="3">
<form action="" method="get"><input type="text" name="skey"
size="30" value="<%=request.getParameter("skey")%>" /> <input
type="submit" value="Search" width="100" /></form>
</td>
</tr>
<tr bgcolor="#e4e4e4" align="center">
<td>Code</td>
<td width="16%">Name</td>
<td width="23%">Description</td>
<td width="15%">Price</td>
<td width="15%">Category</td>
<td colspan="3">Action</td>
</tr>
<s:iterator var="p" value="model">
<tr bgcolor="#ffffff">
<td>${p.code}</td>
<td>${p.name}</td>
<td>${p.description}</td>
<td>${p.price}</td>
<td>${item.cate.kate}


</td>
<td width="9%"><s:url id="detail" action="item/%{id}" /> <a
href="${detail}">Detail</a></td>
<td width="5%"><s:url id="edit" action="item/%{id}/edit" /> <a
href="${edit}">Edit</a></td>
<td width="20%"><s:url id="delete" action="item/%{id}/delete" />
<a href="${delete}"
onClick="javascript: return confirm('Delete ${p.name}?');">Delete</a>
</td>
</tr>
</s:iterator>

<tr bgcolor="#e4e4e4">
<td><s:url id="result" action="item" /> <a href="${result}">
All </a></td>
<td colspan="7" align="right"><strong> <s:url id="new"
action="item/new" /> <a href="${new}">Add new &gt;</a> </strong></td>
</tr>
</table>
</body>
</html>

 

 

 

 


Class Entity dan Controller Cimande2

Untitled Document

Ketemu lagi dengan saya Arilia..
Hari ini saya akan melanjutkan blog saya yang kemarin dulu. Yaitu Jalannya Contoh program dgn Cimande2.
Kalau kemarin hanya tampiannya saja, hari ini akan mulai saya berikan contoh code source nya. Sama sperti Cimande1,
kita mulai dengan class entity. Yaitu Item.java

 

Item.java

package org.blueoxygen.rest.geneology;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.OneToOne;
import javax.persistence.Table;

import org.blueoxygen.cimande.DefaultPersistence;

@Entity
@Table
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class Item extends DefaultPersistence {
private String code, name, description;
private int price;
private Cate cate;

@OneToOne
public Cate getCate() {
return cate;
}

public void setCate(Cate cate) {
this.cate = cate;
}

@Column
public String getCode() {
return code;
}

public void setCode(String code) {
this.code = code;
}

@Column
public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

@Column
public String getDescription() {
return description;
}

public void setDescription(String description) {
this.description = description;
}

@Column
public int getPrice() {
return price;
}

public void setPrice(int price) {
this.price = price;
}

public void setCate(Item caten) {

}

}

 

Lalu setelah kita berikan class Item.java, kita lanjutkan dengan memberikan class ItemController.java

package org.blueoxygen.rest.geneology.action;

import java.util.ArrayList;
import java.util.List;

import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.rest.HttpHeaders;
import org.blueoxygen.cimande.CimandeAction;
import org.blueoxygen.rest.geneology.Cate;
import org.blueoxygen.rest.geneology.Item;
import org.hibernate.Criteria;
import org.hibernate.criterion.Restrictions;

import com.opensymphony.xwork2.ModelDriven;

@Action(value = "item", results = { @Result(name = CimandeAction.SUCCESS, type = "redirect", location = "/item") })
public class ItemController extends CimandeAction implements
ModelDriven<Object> {

protected Item item = new Item();
protected List<Item> items = new ArrayList<Item>();
protected Cate cate = new Cate();
protected List<Cate> cates = new ArrayList<Cate>();

public HttpHeaders index() {
Criteria crit = session.createCriteria(Item.class);
String skey = request.getParameter("skey");
crit.add(Restrictions.like("code", "%" + (skey == null ? "" : skey)+ "%"));
items = crit.list();

return headers.renderResult("item/item-result").disableCaching();
}

public String editNew() {
item = new Item();

return "item/item-add";
}

public String delete() {
item = (Item) session.get(Item.class, id);

session.beginTransaction();
session.delete(item);
session.getTransaction().commit();

return SUCCESS;
}

public String edit() {
item = (Item) session.get(Item.class, id);

return "item/item-edit";
}

public String show() {
System.out.println(item.getId());
item = (Item) session.get(Item.class, id);

Item p = (Item) session.get(Item.class, id);
String hql = "FROM " + Item.class.getName() + "";

return "item/item-detail";
}

public String create() {
save(true);

return SUCCESS;
}

public String update() {
save(false);

return SUCCESS;
}

private void save(boolean create) {
Item temp = new Item();
if (create) {
temp = item;
temp.setId(null);
} else {

temp = (Item) session.get(Item.class, id);
temp.setCode(item.getCode());
temp.setName(item.getName());
temp.setDescription(item.getDescription());
temp.setPrice(item.getPrice());

}

session.beginTransaction();
session.save(temp);
session.getTransaction().commit();
}

public Object getModel() {
return items.size() > 0 ? items : item;
}

}

Class ini berguna untuk mengatur jalannya program. Jadi tidak perlu lagi class struts.xml
Karena sudah digantikan dengan code
@Action(value = "item", results = { @Result(name = CimandeAction.SUCCESS, type = "redirect", location = "/item") })
Ini digunakan untuk memudahkan menuliskan url dalam tampilan. Jadi url dalam Cimande2 lebih simple daripada Cimande1
dan lebih memudahkan kita membacanya.
Di dalam project ini terdapat sebuah package yang isinya berupa file-file viewer(.jsp) yaitu seperti /item/item-result (de el el),
itu merupakan tahapan yang akan di jalankan.


Jalannya contoh program dgn Cimande2

Untitled Document

Berikut ini adalah jalannya contoh program yang menggunakan Cimande2

Tampilan awal yg akan kita jumpai saat menjalankan program dgn Cimande 2 adalah seperti berikut:

Add New
Table di atas masih kosong karena kita belum mengisi table dlm database program tersebut.
Setelah kita click link Add New,,, maka akan muncul tampilan seperti berikut ini :

Masukkan iinput
Kemudian kita coba untuk memasukkan inputan
Input data
Click Submit,,,
dan data yang kita inputkan tadi akan dimunculkan pada table result
Result

Untuk melihat secara detail data tersebut,,
kita click Detail...
Data akan dimunculkan seperti berikut ini:
Detail data
Namun jika pada table result tadi kita click Edit,,
maka tampilan yng muncul akan seperti ini
Edit dulu
Jika kita mengganti datanya dan kita click Submit,,,
data akan di-update dan dimunculkan di table result juga me-replace data yg sebelumnya kita edit tadi..

Namun jika pada table result tadi kita click Delete,,
muncul tampilan seperti berikut..

Delete Data

Click OK untuk menghapus data,, dan click cancel untuk membatalakan..

Create, Update, dan Delete sudah kita coba,,,
Untuk Read terutama search,,, kita gunakan menu di pojok kanan atas halaman untuk mencari data

Search menu

"null" pd textfield di atas kita ganti dgn Code data yang akan kita cari...
Lalu kita click button Search...
Dan data yg ditampilkan hanyalah data yg Codenya sama dengan yg kita cari..
Result 001

Click All untuk memunculkan kembali semua data..
Click All
Semua data yang belum ada dalam table akan dimunculkan lagi ..
All Again
Nah,,
demikianlah jalannya contoh program yang menggunakan Cimande2.