membuat CRUD menggunakan zk spring hibernate framework | java php laravel linux mysql sql bootstrap html css query java php laravel linux mysql sql bootstrap html css query: membuat CRUD menggunakan zk spring hibernate framework

Friday, April 5, 2013

membuat CRUD menggunakan zk spring hibernate framework

Belajar ZK framework, yuk belajar zk dari pada bergalau-galauan :D

Bismillah

Membuat CRU[D] menggunakan framework zk + spring + hibernate.

koq [D] pada tulisan CRU[D] biasanya kan CRUD (Create Read Update Delete), hew hew,, [D] karena untuk delete pasa tulisan mendatang , Insya Allah.

q> ZK framework : http://www.zkoss.org/
q> Membuat bean entity class untuk mahasiswa

[sourcecode language="java"]package com.saifiahmada.belajarzk.bean;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

/** @author Saifi Ahmada Apr 4, 2013 4:30:49 PM  **/

@Entity
@Table(name="MAHASISWA")
public class Mahasiswa implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@Column(name="NIM", length=4, nullable=false)
private String nim;

@Column(name="NAMA", length=30, nullable=false)
private String nama;

@Column(name="ALAMAT", length=50)
private String alamat;

@Column(name="NO_HP", length=20)
private String noHP;

public Mahasiswa() {

}

public Mahasiswa(String nim) {
this.nim = nim;
}

public String getNim() {
return nim;
}

public void setNim(String nim) {
this.nim = nim;
}

public String getNama() {
return nama;
}

public void setNama(String nama) {
this.nama = nama;
}

public String getAlamat() {
return alamat;
}

public void setAlamat(String alamat) {
this.alamat = alamat;
}

public String getNoHP() {
return noHP;
}

public void setNoHP(String noHP) {
this.noHP = noHP;
}

@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((nim == null) ? 0 : nim.hashCode());
return result;
}

@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Mahasiswa other = (Mahasiswa) obj;
if (nim == null) {
if (other.nim != null)
return false;
} else if (!nim.equals(other.nim))
return false;
return true;
}

@Override
public String toString() {
return "Mahasiswa [nim=" + nim + "]";
}

}

[/sourcecode]

q> Membuat interface MahasiswaDao

[sourcecode language="java"]package com.saifiahmada.belajarzk.dao;

import java.util.List;

import com.saifiahmada.belajarzk.bean.Mahasiswa;

/** @author Saifi Ahmada Apr 4, 2013 4:35:37 PM  **/

public interface MahasiswaDao {

public void saveOrUpdate(Mahasiswa mhs);

public void delete(Mahasiswa mhs);

public List<Mahasiswa> findAll();

}

[/sourcecode]

q> Membuat class MahasiswaDaoImpl

[sourcecode language="java"]package com.saifiahmada.belajarzk.dao;

import java.util.List;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.transaction.annotation.Transactional;

import com.saifiahmada.belajarzk.bean.Mahasiswa;

/** @author Saifi Ahmada Apr 4, 2013 4:35:49 PM  **/

public class MahasiswaDaoImpl extends HibernateDaoSupport implements MahasiswaDao {

@Transactional(readOnly=false)
public void saveOrUpdate(Mahasiswa mhs) {
// TODO , masbro
Mahasiswa entity = (Mahasiswa) getHibernateTemplate().getSessionFactory().getCurrentSession().get(Mahasiswa.class, mhs.getNim());
if (entity == null){
getHibernateTemplate().save(mhs);
System.out.println("insert");
}else{
getHibernateTemplate().merge(mhs);
System.out.println("update");
}

}

public void delete(Mahasiswa mhs) {
// TODO , masbro

}

@Transactional(readOnly=true)
public List<Mahasiswa> findAll() {
// TODO , masbro

return getHibernateTemplate().find("from Mahasiswa");
}

}

[/sourcecode]

q> Configurasi pada hibernate.cfg.xml

[sourcecode language="xml"]<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- Database dialect untuk oracle-->
<!-- <property name="hibernate.dialect">org.hibernate.dialect.Oracle9iDialect</property> -->

<!-- Database dialect untuk mysql-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

<!-- Echo all executed SQL to stdout -->
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<property name="hibernate.hbm2ddl.auto">update</property>

<mapping class="com.saifiahmada.belajarzk.bean.TrioMstaccessrole" />
<mapping class="com.saifiahmada.belajarzk.bean.TrioMstmenu" />
<mapping class="com.saifiahmada.belajarzk.bean.TrioMstrole" />
<mapping class="com.saifiahmada.belajarzk.bean.TrioMstuser" />

<mapping class="com.saifiahmada.belajarzk.bean.TrioMstuserrole" />
<mapping class="com.saifiahmada.belajarzk.bean.TrioMstcabang" />

<mapping class="com.saifiahmada.belajarzk.bean.Mahasiswa" />

</session-factory>
</hibernate-configuration>

[/sourcecode]

q> Configurasi applicationContext.xml untuk Spring

[sourcecode language="xml"]<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
<!-- <bean id="propertyConfigurer">
<property name="location" value="file:/home/glassfish/ZKGLASS/database.properties"
/> </bean> -->

<bean
class="org.jasypt.spring.properties.EncryptablePropertyPlaceholderConfigurer">
<constructor-arg>
<bean>
<property name="password" value="saifiahmadaencrypter" />
</bean>
</constructor-arg>
<property name="locations">
<list>
<!-- config buat linux -->
<value>file:/home/glassfish/workspace/belajarzk/dbconfig.properties</value>
<!-- config buat windows -->
<!--<value>file:D:\config\dbconfig.properties</value>-->
</list>
</property>
</bean>

<!-- the data source class is recommend to use com.mchange.v2.c3p0.ComboPooledDataSource
in production phase -->
<bean id="dataSource"
destroy-method="close">
<property name="driverClass" value="${jdbc.driverClass}" />
<property name="jdbcUrl" value="${jdbc.jdbcUrl}" />
<property name="user" value="${jdbc.user}" />
<property name="password" value="${jdbc.password}" />
</bean>

<!-- define Hibernate sessionFactory provided by Spring ORM -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!-- set other Hibernate properties in hibernate.cfg.xml file -->
<property name="configLocation" value="/WEB-INF/hibernate.cfg.xml" />
</bean>

<!-- define Hibernate sessionFactory provided by Spring -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>

<!-- for using annotation @Transaction in DAOs -->
<tx:annotation-driven />

<bean id="trioMstaccessroleDao">
<property name="sessionFactory" ref="sessionFactory" />
</bean>

<bean id="trioMstmenuDao">
<property name="sessionFactory" ref="sessionFactory" />
</bean>

<bean id="trioMstroleDao">
<property name="sessionFactory" ref="sessionFactory" />
</bean>

<bean id="trioMstuserDao">
<property name="sessionFactory" ref="sessionFactory" />
</bean>

<bean id="trioMstuserroleDao">
<property name="sessionFactory" ref="sessionFactory" />
</bean>

<bean id="trioMstcabangDao">
<property name="sessionFactory" ref="sessionFactory" />
</bean>

<bean id="mahasiswaDao">
<property name="sessionFactory" ref="sessionFactory" />
</bean>

<!-- master facade beans -->

<bean id="masterFacade">

<property name="mahasiswaDao">
<ref bean="mahasiswaDao" />
</property>

<property name="trioMstcabangDao">
<ref bean="trioMstcabangDao" />
</property>
<property name="trioMstuserroleDao">
<ref bean="trioMstuserroleDao" />
</property>
<property name="trioMstaccessroleDao">
<ref bean="trioMstaccessroleDao" />
</property>

<property name="trioMstmenuDao">
<ref bean="trioMstmenuDao" />
</property>

<property name="trioMstroleDao">
<ref bean="trioMstroleDao" />
</property>

<property name="trioMstuserDao">
<ref bean="trioMstuserDao" />
</property>

</bean>
</beans>[/sourcecode]

q> Membuat class MasterFacade

[sourcecode language="java"]package com.saifiahmada.belajarzk.facade;

import com.saifiahmada.belajarzk.dao.MahasiswaDao;
import com.saifiahmada.belajarzk.dao.TrioMstaccessroleDao;
import com.saifiahmada.belajarzk.dao.TrioMstcabangDao;
import com.saifiahmada.belajarzk.dao.TrioMstmenuDao;
import com.saifiahmada.belajarzk.dao.TrioMstroleDao;
import com.saifiahmada.belajarzk.dao.TrioMstuserDao;
import com.saifiahmada.belajarzk.dao.TrioMstuserroleDao;

public class MasterFacade {

protected TrioMstaccessroleDao trioMstaccessroleDao;

protected TrioMstmenuDao trioMstmenuDao;

protected TrioMstroleDao trioMstroleDao;

protected TrioMstuserDao trioMstuserDao;

protected TrioMstuserroleDao trioMstuserroleDao;

protected TrioMstcabangDao trioMstcabangDao;

protected MahasiswaDao mahasiswaDao;

public MahasiswaDao getMahasiswaDao() {
return mahasiswaDao;
}

public void setMahasiswaDao(MahasiswaDao mahasiswaDao) {
this.mahasiswaDao = mahasiswaDao;
}

public TrioMstcabangDao getTrioMstcabangDao() {
return trioMstcabangDao;
}

public void setTrioMstcabangDao(TrioMstcabangDao trioMstcabangDao) {
this.trioMstcabangDao = trioMstcabangDao;
}

public TrioMstuserroleDao getTrioMstuserroleDao() {
return trioMstuserroleDao;
}

public void setTrioMstuserroleDao(TrioMstuserroleDao trioMstuserroleDao) {
this.trioMstuserroleDao = trioMstuserroleDao;
}

public TrioMstaccessroleDao getTrioMstaccessroleDao() {
return trioMstaccessroleDao;
}

public void setTrioMstaccessroleDao(TrioMstaccessroleDao trioMstaccessroleDao) {
this.trioMstaccessroleDao = trioMstaccessroleDao;
}

public TrioMstmenuDao getTrioMstmenuDao() {
return trioMstmenuDao;
}

public void setTrioMstmenuDao(TrioMstmenuDao trioMstmenuDao) {
this.trioMstmenuDao = trioMstmenuDao;
}

public TrioMstroleDao getTrioMstroleDao() {
return trioMstroleDao;
}

public void setTrioMstroleDao(TrioMstroleDao trioMstroleDao) {
this.trioMstroleDao = trioMstroleDao;
}

public TrioMstuserDao getTrioMstuserDao() {
return trioMstuserDao;
}

public void setTrioMstuserDao(TrioMstuserDao trioMstuserDao) {
this.trioMstuserDao = trioMstuserDao;
}

}

[/sourcecode]

q> Membuat View / Interface menggunakan ZK -> inputMahasiswa.zul

[sourcecode language="xml"]<?page title="new page title" contentType="text/html;charset=UTF-8"?>
<zk>
<style src="../css/triostyle.css"/>
<div
apply="org.zkoss.bind.BindComposer" viewModel="@id('vm') @init('com.saifiahmada.belajarzk.input.InputMahasiswaVM')">
<separator />

<groupbox><caption label="Input Mahasiswa" sclass="mycaption" />
<vbox>
<hbox>
<cell width="100px"><label sclass="mylabel" value="NIM" /></cell>
<cell><textbox sclass="mytext" value="@bind(vm.mahasiswa.nim)" /></cell>
</hbox>

<hbox>
<cell width="100px"><label sclass="mylabel" value="Nama" /></cell>
<cell><textbox sclass="mytext" value="@bind(vm.mahasiswa.nama)" /></cell>
</hbox>

<hbox>
<cell width="100px"><label sclass="mylabel" value="Alamat" /></cell>
<cell><textbox sclass="mytext" value="@bind(vm.mahasiswa.alamat)" /></cell>
</hbox>

<hbox>
<cell width="100px"><label sclass="mylabel" value="No HP" /></cell>
<cell><textbox sclass="mytext" value="@bind(vm.mahasiswa.noHP)" /></cell>
</hbox>
</vbox>
<separator />
<button label="Simpan" sclass="mybutton orange bigrounded" onClick="@command('save')" image="/image/iconcrud/btn_save.gif" />
<space width="5px" />
<button label="Reset" sclass="mybutton orange bigrounded" onClick="@command('reset')" image="/image/iconcrud/btn_reset.gif" />
</groupbox>
<separator />
<listbox sclass="mylist" model="@load(vm.mahasiswaModel)" selectedItem="@bind(vm.mahasiswa)"
mold="paging" pageSize="10" pagingPosition="bottom">
<listhead sizable="true">
<listheader width="100px" label="NIM" />
<listheader width="100px" label="Nama" />
<listheader width="100px" label="Alamat" />
<listheader label="NO HP" />
</listhead>

<template name="model" var="p1">
<listitem>
<listcell label="@load(p1.nim)" />
<listcell label="@load(p1.nama)" />
<listcell label="@load(p1.alamat)" />
<listcell label="@load(p1.noHP)" />
</listitem>
</template>
</listbox>
</div>
</zk>[/sourcecode]

q> Membuat class ViewModel untuk inputMahasiswa.zul --> InputMahasiswaVM

[sourcecode language="java"]package com.saifiahmada.belajarzk.input;

import org.zkoss.bind.annotation.Command;
import org.zkoss.bind.annotation.NotifyChange;
import org.zkoss.zul.ListModelList;

import com.saifiahmada.belajarzk.base.TrioBasePageVM;
import com.saifiahmada.belajarzk.bean.Mahasiswa;

/** @author Saifi Ahmada Apr 4, 2013 4:46:43 PM  **/

public class InputMahasiswaVM extends TrioBasePageVM {

private Mahasiswa mahasiswa;

private ListModelList<Mahasiswa> mahasiswaModel;

public ListModelList<Mahasiswa> getMahasiswaModel(){
if (mahasiswaModel == null) {
mahasiswaModel = new ListModelList<Mahasiswa>();
mahasiswaModel.addAll(getMasterFacade().getMahasiswaDao().findAll());
}
return mahasiswaModel;
}

@NotifyChange({"mahasiswa","mahasiswaModel"})
@Command
public void save(){
System.out.println("save");
System.out.println("Nama "+mahasiswa.getNama());
getMasterFacade().getMahasiswaDao().saveOrUpdate(getMahasiswa());
reset();
}

@NotifyChange({"mahasiswa","mahasiswaModel"})
@Command
public void reset(){
mahasiswaModel = new ListModelList<Mahasiswa>();
mahasiswaModel.addAll(getMasterFacade().getMahasiswaDao().findAll());
mahasiswa = new Mahasiswa();
}

public Mahasiswa getMahasiswa() {
if (mahasiswa == null) mahasiswa = new Mahasiswa();
return mahasiswa;
}

public void setMahasiswa(Mahasiswa mahasiswa) {
this.mahasiswa = mahasiswa;
}

}

[/sourcecode]

q> Code for TrioBasePageVM

[sourcecode language="java"]package com.saifiahmada.belajarzk.base;

import java.sql.Connection;

import javax.sql.DataSource;

import org.springframework.jdbc.datasource.DataSourceUtils;
import org.zkoss.zk.ui.Sessions;
import org.zkoss.zkplus.spring.SpringUtil;

import com.saifiahmada.belajarzk.facade.MasterFacade;

/*
* Created by Saifi Ramli $
*
* Tue Sep 25 21:03:40 PM @ kos Bandaneira
*/

public class TrioBasePageVM  {

/**
*
*/

private static String userSession;

private MasterFacade mf;

public MasterFacade getMasterFacade() {
MasterFacade mf = (MasterFacade) SpringUtil.getBean("masterFacade");
return mf;
}

public static String getUserSession() {
String username = (String) Sessions.getCurrent().getAttribute("username");
System.out.println("username = "+username);
userSession = username;
return userSession;
}

public static void setUserSession(String userSession) {
TrioBasePageVM.userSession = userSession;
}

public Connection getReportConnection(){

DataSource ds = (DataSource) SpringUtil.getBean("dataSource");
Connection con = DataSourceUtils.getConnection(ds);
return con;
}

}

[/sourcecode]

q> Package project "belajarzk"

Selection_089

q> Tampilan form Input Mahasiswa

Selection_091

q> Isi form tekan tombol Simpan

Selection_092

q> Setelah tombol Simpan diklik

Selection_093

q> Untuk ngedit gimana dong :D

Selection_094

q> Gimana hasilnya ?

Selection_095

q> Untuk delete, bersambung dulu ya , next

q> Insya Allah.

[Updated] Untuk delete action ini linknya

http://saifiahmada.wordpress.com/2013/04/05/membuat-crud-menggunakan-zk-spring-hibernate-framework2/

[Update2] Atas koreksi spinx73 ( thank )

q> Edit file web.xml ( config spring dan zk )
[sourcecode language="xml"]

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<description><![CDATA[My ZK Application]]></description>
<display-name>belajarzk</display-name>

<!-- spring -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>

<!-- //// -->
<!-- ZK -->
<listener>
<description>ZK listener for session cleanup</description>
<listener-class>org.zkoss.zk.ui.http.HttpSessionListener</listener-class>
</listener>
<servlet>
<description>ZK loader for ZUML pages</description>
<servlet-name>zkLoader</servlet-name>
<servlet-class>org.zkoss.zk.ui.http.DHtmlLayoutServlet</servlet-class>

<!-- Must. Specifies URI of the update engine (DHtmlUpdateServlet).
It must be the same as <url-pattern> for the update engine.
-->
<init-param>
<param-name>update-uri</param-name>
<param-value>/zkau</param-value>
</init-param>
<!-- Optional. Specifies whether to compress the output
of the ZK loader. It speeds up the transmission over slow Internet.
However, if you configure a filter to post-processing the
output, you might have to disable it.

Default: true
<init-param>
<param-name>compress</param-name>
<param-value>true</param-value>
</init-param>
-->
<!-- [Optional] Specifies the default log level: OFF, ERROR, WARNING,
INFO, DEBUG and FINER. If not specified, the system default is used.
<init-param>
<param-name>log-level</param-name>
<param-value>OFF</param-value>
</init-param>
-->
<load-on-startup>1</load-on-startup><!-- Must -->
</servlet>
<servlet-mapping>
<servlet-name>zkLoader</servlet-name>
<url-pattern>*.zul</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>zkLoader</servlet-name>
<url-pattern>*.zhtml</url-pattern>
</servlet-mapping>
<!-- [Optional] Uncomment it if you want to use richlets.
<servlet-mapping>
<servlet-name>zkLoader</servlet-name>
<url-pattern>/zk/*</url-pattern>
</servlet-mapping>
-->
<servlet>
<description>The asynchronous update engine for ZK</description>
<servlet-name>auEngine</servlet-name>
<servlet-class>org.zkoss.zk.au.http.DHtmlUpdateServlet</servlet-class>

<!-- [Optional] Specifies whether to compress the output
of the ZK loader. It speeds up the transmission over slow Internet.
However, if your server will do the compression, you might have to disable it.

Default: true
<init-param>
<param-name>compress</param-name>
<param-value>true</param-value>
</init-param>
-->
<!-- [Optional] Specifies the AU extension for particular prefix.
<init-param>
<param-name>extension0</param-name>
<param-value>/upload=com.my.MyUploader</param-value>
</init-param>
-->
</servlet>
<servlet-mapping>
<servlet-name>auEngine</servlet-name>
<url-pattern>/zkau/*</url-pattern>
</servlet-mapping>

<!-- [Optional]
Uncomment if you want to use the ZK filter to post process the HTML output
generated by other technology, such as JSP and velocity.
<filter>
<filter-name>zkFilter</filter-name>
<filter-class>org.zkoss.zk.ui.http.DHtmlLayoutFilter</filter-class>
<init-param>
<param-name>extension</param-name>
<param-value>html</param-value>
</init-param>
<init-param>
<param-name>compress</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>zkFilter</filter-name>
<url-pattern>your URI pattern</url-pattern>
</filter-mapping>
-->
<!-- //// -->

<!-- ///////////// -->
<!-- DSP (optional)
Uncomment it if you want to use DSP
However, it is turned on since zksandbox uses DSP to generate CSS.
<servlet>
<servlet-name>dspLoader</servlet-name>
<servlet-class>org.zkoss.web.servlet.dsp.InterpreterServlet</servlet-class>
<init-param>
<param-name>class-resource</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dspLoader</servlet-name>
<url-pattern>*.dsp</url-pattern>
</servlet-mapping>
-->

<!-- /////////// -->
<!-- [Optional] Session timeout -->
<session-config>
<session-timeout>60</session-timeout>
</session-config>

<!-- [Optional] MIME mapping -->
<mime-mapping>
<extension>doc</extension>
<mime-type>application/vnd.ms-word</mime-type>
</mime-mapping>
<mime-mapping>
<extension>gif</extension>
<mime-type>image/gif</mime-type>
</mime-mapping>
<mime-mapping>
<extension>htm</extension>
<mime-type>text/html</mime-type>
</mime-mapping>
<mime-mapping>
<extension>html</extension>
<mime-type>text/html</mime-type>
</mime-mapping>
<mime-mapping>
<extension>jpeg</extension>
<mime-type>image/jpeg</mime-type>
</mime-mapping>
<mime-mapping>
<extension>jpg</extension>
<mime-type>image/jpeg</mime-type>
</mime-mapping>
<mime-mapping>
<extension>js</extension>
<mime-type>text/javascript</mime-type>
</mime-mapping>
<mime-mapping>
<extension>pdf</extension>
<mime-type>application/pdf</mime-type>
</mime-mapping>
<mime-mapping>
<extension>png</extension>
<mime-type>image/png</mime-type>
</mime-mapping>
<mime-mapping>
<extension>txt</extension>
<mime-type>text/plain</mime-type>
</mime-mapping>
<mime-mapping>
<extension>xls</extension>
<mime-type>application/vnd.ms-excel</mime-type>
</mime-mapping>
<mime-mapping>
<extension>xml</extension>
<mime-type>text/xml</mime-type>
</mime-mapping>
<mime-mapping>
<extension>zhtml</extension>
<mime-type>text/html</mime-type>
</mime-mapping>
<mime-mapping>
<extension>zul</extension>
<mime-type>text/html</mime-type>
</mime-mapping>

<welcome-file-list>
<welcome-file>index.zul</welcome-file>
<welcome-file>index.zhtml</welcome-file>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
</welcome-file-list>
</web-app>

[/sourcecode]





Alhamdulillah

7 comments:

  1. nanya dong, web.xml tidak diedit? bagaimana applicationContext.xml dan hibernate.cfg.xml diload?

    ReplyDelete
  2. @spinx73 : o iya pak,, terima kasih atas koreksinya :) ,, segera saya berbaiki.

    thank alot Pak.

    ReplyDelete
  3. jadi malu, padahal saya beneran nanya karena lagi belajar juga tentang webapp dengan zk. kl boleh lagi nih source code di upload biar bisa sama2 belajar, karena sampe sekarang masih belum jelas hubungan antara applicationcontext dan hibernate.cfg

    ReplyDelete
  4. ok pak, ini sudah saya commit code nya di github

    https://github.com/saifiahmada/myweb

    ReplyDelete
  5. krisna eka prasastiJuly 8, 2013 at 12:47 AM

    bpk dapet tutorial zkoss dr mana? :D

    bingung cari referensinya :D

    ReplyDelete
  6. sorry baru buka blog :D ,, tutorial zkoss yang lengkap di www.zkoss.org

    thanks

    ReplyDelete

saifiahmada.com adalah blog belajar programming Indonesia, membahas lengkap materi bahasa pemrograman: code HTML, CSS, Bootstrap, Desain, PHP, MySQL, coding Java, Query, SQL, dan dunia linux