json dan xml
JSON (JavaScript Object Notation) adalah basis teks yang ringan dan di design untuk pertukaran data dan mudah untuk dibaca oleh manusia. JSON berasal dari bahasa pemrograman JavaScript yang mempresentasikan struktur data sederhana dan array yang disebut objek. JSON merupakan format teks yang benar-benar bahasa independen tetapi menggunakan konvensi yang familiar bagi programmer selain java.
Internet Media type untuk JSON adalah application/json, sedangkan nama ekstensinya adalah .json .Contoh json:
"item":{"id":ff2392mf229200001"code": "3002","name": "Gallardo","description":-}
XML (Extensible Markup Language) adalah bahasa markup yang didesain untuk mampu menyimpan data secara ringkas dan mudah di atur. Internet Media Type untuk XML adalah application/xhtml+xml dan ber ekstensi .xml.
Perbedaan JSON dan XML terletak pada ukuran filenya, dimana ukuran file XML lebih besar sekitar 30% dari JSON, tetapi jika menggunakan attribute ukuran file antara JSON dan XML hampir samacontoh xml menggunakan element:
<items><code>457</code><description>-</description><id>4028818d29e72e9d0129e73135000001</id><name>Gallardo</name><price>3000</price></items>
contoh xml menggunakan attribute :
<items><itemcode="12"description="-"id="4028818f29bf477d0129bf4a6dd90001"name="Nokia1600"price="900000"/></items>
hibernate configuration in spring mvc
Berikut adalah konfigurasi hibernate pada spring mvc versi annotaion:
- applicationContext.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:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"><context:property-placeholder location="classpath:hsa.properties" />
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource"
p:driverClassName="${hibernate.connection.driver_class}"
p:url="${hibernate.connection.url}"
p:username="${hibernate.connection.username}"
p:password="${hibernate.connection.password}" />
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"
p:dataSource-ref="dataSource">
<property name="configLocation">
<value>classpath:hibernate.cfg.xml</value>
</property>
</bean>
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager"
p:sessionFactory-ref="sessionFactory" />
<tx:annotation-driven/>
</beans>
- hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/smvc</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">vick</property>
<property name="hibernate.connection.pool_size">10</property>
<property name="show_sql">false</property>
</session-factory>
</hibernate-configuration>
- hsa.properties
# To change this template, choose Tools | Templates
# and open the template in the editor.
hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect
hibernate.connection.driver_class=com.mysql.jdbc.Driver
hibernate.connection.url=jdbc:mysql://localhost:3306/smvc
hibernate.connection.username =root
hibernate.connection.password =vick
berikut untuk melihat apakah koneksi hibernate yg telah anda buat berhasil atau tidak?
- TestConnection.java
import java.sql.Connection;import java.sql.SQLException;import javax.sql.DataSource;import org.hibernate.cfg.AnnotationConfiguration;import org.hibernate.cfg.Configuration;import org.hibernate.tool.hbm2ddl.SchemaExport;import org.springframework.context.support.AbstractApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class TestConnection {
public static void main(String [] args) {
AbstractApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
DataSource dataSource = (DataSource) ctx.getBean("dataSource");Configuration cfg = new AnnotationConfiguration().configure("hibernate.cfg.xml").setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLInnoDBDialect");
try{Connection conn = dataSource.getConnection();
new SchemaExport(cfg, conn).create(true, true);
System.out.println("Koneksi berhasil");conn.close();
}catch(SQLException e){System.out.println("Koneksi gagal");}
ctx.registerShutdownHook();
}
}
- berikut adalah hasilnya :D
06 Okt 10 23:24:17 org.springframework.context.support.AbstractApplicationContext prepareRefreshINFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@dd5b: startup date [Wed Oct 06 23:24:17 ICT 2010]; root of context hierarchy06 Okt 10 23:24:17 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitionsINFO: Loading XML bean definitions from class path resource [applicationContext.xml]06 Okt 10 23:24:17 org.springframework.core.io.support.PropertiesLoaderSupport loadPropertiesINFO: Loading properties file from class path resource [hsa.properties]06 Okt 10 23:24:17 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletonsINFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@a352a5: defining beans [org.springframework.beans.factory.config.PropertyPlaceholderConfigurer#0,dataSource,sessionFactory,transactionManager,org.springframework.aop.config.internalAutoProxyCreator,org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0,org.springframework.transaction.interceptor.TransactionInterceptor#0,org.springframework.transaction.config.internalTransactionAdvisor]; root of factory hierarchy06 Okt 10 23:24:17 org.springframework.jdbc.datasource.DriverManagerDataSource setDriverClassNameINFO: Loaded JDBC driver: com.mysql.jdbc.Driver0 [main] INFO org.hibernate.cfg.annotations.Version - Hibernate Annotations 3.4.0.GA16 [main] INFO org.hibernate.cfg.Environment - Hibernate 3.3.1.GA16 [main] INFO org.hibernate.cfg.Environment - hibernate.properties not found32 [main] INFO org.hibernate.cfg.Environment - Bytecode provider name : javassist32 [main] INFO org.hibernate.cfg.Environment - using JDK 1.4 java.sql.Timestamp handling110 [main] INFO org.hibernate.annotations.common.Version - Hibernate Commons Annotations 3.1.0.GA110 [main] INFO org.hibernate.cfg.Configuration - configuring from url: file:/D:/workspace/blog/springmaven/target/classes/hibernate.cfg.xml188 [main] INFO org.hibernate.cfg.Configuration - Configured SessionFactory: null266 [main] INFO org.hibernate.cfg.AnnotationConfiguration - Hibernate Validator not found: ignoring06 Okt 10 23:24:18 org.springframework.orm.hibernate3.LocalSessionFactoryBean buildSessionFactoryINFO: Building new Hibernate SessionFactory282 [main] INFO org.hibernate.connection.ConnectionProviderFactory - Initializing connection provider: org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider688 [main] INFO org.hibernate.cfg.SettingsFactory - RDBMS: MySQL, version: 5.1.41688 [main] INFO org.hibernate.cfg.SettingsFactory - JDBC driver: MySQL-AB JDBC Driver, version: mysql-connector-java-5.1.12 ( Revision: ${bzr.revision-id} )703 [main] INFO org.hibernate.dialect.Dialect - Using dialect: org.hibernate.dialect.MySQLInnoDBDialect750 [main] INFO org.hibernate.transaction.TransactionFactoryFactory - Transaction strategy: org.springframework.orm.hibernate3.SpringTransactionFactory750 [main] INFO org.hibernate.transaction.TransactionManagerLookupFactory - No TransactionManagerLookup configured (in JTA environment, use of read-write or transactional second-level cache is not recommended)750 [main] INFO org.hibernate.cfg.SettingsFactory - Automatic flush during beforeCompletion(): disabled750 [main] INFO org.hibernate.cfg.SettingsFactory - Automatic session close at end of transaction: disabled750 [main] INFO org.hibernate.cfg.SettingsFactory - JDBC batch size: 15750 [main] INFO org.hibernate.cfg.SettingsFactory - JDBC batch updates for versioned data: disabled750 [main] INFO org.hibernate.cfg.SettingsFactory - Scrollable result sets: enabled750 [main] INFO org.hibernate.cfg.SettingsFactory - JDBC3 getGeneratedKeys(): enabled750 [main] INFO org.hibernate.cfg.SettingsFactory - Connection release mode: auto750 [main] INFO org.hibernate.cfg.SettingsFactory - Maximum outer join fetch depth: 2750 [main] INFO org.hibernate.cfg.SettingsFactory - Default batch fetch size: 1750 [main] INFO org.hibernate.cfg.SettingsFactory - Generate SQL with comments: disabled750 [main] INFO org.hibernate.cfg.SettingsFactory - Order SQL updates by primary key: disabled750 [main] INFO org.hibernate.cfg.SettingsFactory - Order SQL inserts for batching: disabled750 [main] INFO org.hibernate.cfg.SettingsFactory - Query translator: org.hibernate.hql.ast.ASTQueryTranslatorFactory750 [main] INFO org.hibernate.hql.ast.ASTQueryTranslatorFactory - Using validasi pada spring mvc
Tentunya dalam membuat sebuah apliksai web, kita tidak akan jauh dari yang namanya validasi.
Berikut ini, saya akan menjelaskan cara menggunakan validator pada spring mvc.
Dalam validasi pada spring mvc terdapat 2 method yang di gunakan yaitu:
- supports(Class) ?> Digunakan untuk mengenali class mana yang akan di validasi
- validate(Object, org.springframework.validation.Errors) ?> memvalidasi objek yang diberikan dan jika terjadi kesalahan maka mendaftarkan objek dengan diberikan errors objek
- ItemValidator.java
1: public class ItemValidator implements Validator{2:3: //Class yang akan di validasi4: public boolean supports(Class<?> clazz){5: return Item.class.equals(clazz);6: }7:8: public void validate(Object val, Errors errors){9: ValidationUtils.rejectIfEmpty(errors, "code", "code.empty");10: ValidationUtils.rejectIfEmpty(errors, "name", "name.empty");11: ValidationUtils.rejectIfEmpty(errors, "price", "price.empty");12: }13:14: }
static rejectIfEmpty(??) adalah method dari class ValidationUtils yang digunakan untuk me-reject property ?code? / property ?name? / property ?price? jika bernilai null atau string kosong.
- Buat file ?> messages_en_US.properties ?> simpan pada classpath
1: code.empty = Code should not empty2: name.empty = Name should not empty3: price.empty = price should not empty or zero
- untuk view nya :
1: <?xml version="1.0" encoding="UTF-8"?>2: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">3: <html xmlns="http://www.w3.org/1999/xhtml">4: <head>5: <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />6: <title>Item</title>7: <!--script type="text/javascript">8: function search() {9: var input = document.getElementsByName("name").value='';10: }11: </script-->12: </head>13: <body>14: <form id="item" action="" method="post" >15: <table bgcolor="#000000" border="0" cellpadding="3" cellspacing="1" align="center">16: <tr bgcolor="#d0dcff">17: <td colspan="2">18: <strong>Item</strong>19: </td>20: </tr>21: <tr bgcolor="#ffffff">22: <td>Code</td>23: <td>24: <input type="text" name="code" id="code" value="$!item.code" maxlength="20" tabindex="1"/>25: #springBind("item.code")26: #springShowErrors("<br/>" "")27: </td>28:29: </tr>30: <tr bgcolor="#ffffff">31: <td>Name</td>32: <td>33: <input type="text" name="name" id="name" value="$!item.name" tabindex="2" maxlength="20"/>34: #springBind("item.name")35: #springShowErrors("<br/>" "")36: </td>37: </tr>38: <tr bgcolor="#ffffff">39: <td>Price</td>40: <td>41: <input type="text" name="price" value="$!item.price" id="price" tabindex="3" maxlength="20"/>42: #springBind("item.price")43: #springShowErrors("<br/>" "")44: </td>45: </tr>46: <tr bgcolor="#ffffff">47: <td>Description</td>48: <td><textarea name="description" id="description" tabindex="5" class="text" maxlength="100">$!item.description</textarea></td>49: </tr>50: <tr bgcolor="#ffffff">51: <td colspan="2">52: <input type="submit" value="Submit" tabindex="20"/>53: <input type="reset" tabindex="21"/>54: </td>55: </tr>56: </table>57: </form>58: <br/><br/>59:60: </body>61: </html>
#springBind(?.) ?> digunakan untuk mengambil object errors yang sudah terdaftar
- Contoh:
Selamat mencoba :D
Spring 3 mvc rest
Kali ini saya akan memberikan contoh implementasi rest pada spring 3 mvc .
- Library yang di gunakan :
- aopalliance-1.0.jar
- commons-logging-1.1.1.jar
- servlet-api-2.5.jar
- org.springframework.asm-3.0.0.RELEASE.jar
- org.springframework.beans-3.0.0.RELEASE.jar
- org.springframework.context-3.0.0.RELEASE.jar
- org.springframework.context.support-3.0.0.RELEASE.jar
- org.springframework.core-3.0.0.RELEASE.jar
- org.springframework.expression-3.0.0.RELEASE.jar
- org.springframework.web-3.0.0.RELEASE.jar
- org.springframework.web.servlet-3.0.0.RELEASE.jar
- hibernate-core-3.3.1.GA.jar
- hibernate-search-3.1.0.GA.jar
- hibernate-commons-annotations-3.1.0.GA.jar
- hibernate-annotations-.3.4.0.GA.jar
- Struktur project
- Item.java
1: package org.blueoxygen.cimande2.entity;2:3: import java.io.Serializable;4: import javax.persistence.Column;5: import javax.persistence.Entity;6: import javax.persistence.GeneratedValue;7: import javax.persistence.Id;8: import javax.persistence.Table;9: import org.hibernate.annotations.GenericGenerator;10:11: /**12: *13: * @author vick14: */15: @Entity16: @Table17: public class Item implements Serializable{18:19: @Id20: @GeneratedValue(generator="i")21: @GenericGenerator(name="i", strategy="uuid")22: @Column23: private String id;24:25: @Column26: private String code;27:28: @Column29: private String name;30:31: @Column32: private Long price;33:34: @Column35: private String description;36:37: //Getter and Setter
- BaseDaoHibernate.java
1: package org.blueoxygen.cimande2.dao.base;2:
3: import java.lang.reflect.ParameterizedType;4: import java.util.List;5:
6: import org.hibernate.SessionFactory;7: import org.springframework.beans.factory.annotation.Autowired;8:
9:
10: /**11: *
12: * @author vick
13: */
14: public class BaseDaoHibernate<T> {
15:
16: @SuppressWarnings("unchecked")17: protected Class domainClass;18:
19: @Autowired protected SessionFactory sessionFactory;20:
21: @SuppressWarnings("unchecked")22: public BaseDaoHibernate(){23: this.domainClass = (Class) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];24: }
25:
26: @SuppressWarnings("unchecked")27: public T findById(String id){28: if(id.equalsIgnoreCase("")) return null;
29: final T domain = (T) sessionFactory.getCurrentSession().get(domainClass, id);30: return domain;31: }
32:
33: public T save(T domain){34: sessionFactory.getCurrentSession().saveOrUpdate(domain);
35: return domain;36: }
37:
38: public void delete(T domain){
39: sessionFactory.getCurrentSession().delete(domain);
40: }
41:
42: @SuppressWarnings("unchecked")43: public List<T> findAll(Integer startIndex, Integer pageSize){44: return sessionFactory.getCurrentSession().createQuery("from "+domainClass.getName()).setFirstResult(startIndex).setMaxResults(pageSize).list();
45: }
46:
47: @SuppressWarnings("unchecked")48: public List<T> findAll(){49: return sessionFactory.getCurrentSession().createQuery("from "+domainClass.getName()).list();
50: }
51: }
untuku konfigurasi hibernate ada di blog sebelah :D link?> spring hibernate
- ItemDao.java
1: package org.blueoxygen.cimande2.dao;2:
3:
4: import org.blueoxygen.cimande2.dao.base.BaseDaoHibernate;5: import org.blueoxygen.cimande2.entity.Item;6: import org.springframework.stereotype.Repository;7:
8: /**9: *
10: * @author vick
11: */
12: @Repository
13: public class ItemDao extends BaseDaoHibernate<Item>{
14:
15: }
- ItemService.java
1: package org.blueoxygen.cimande2.service;2:
3: import java.util.List;4:
5: import org.blueoxygen.cimande2.entity.Item;6:
7:
8: /**9: *
10: * @author vick
11: */
12: public interface ItemService {
13:
14: void save(Item item);15: void delete(Item item);16: Item getItem(String id);
17:
18: }
- ItemServiceImpl.java
1: import org.blueoxygen.cimande2.dao.ItemDao;2: import org.blueoxygen.cimande2.entity.Item;3: import org.blueoxygen.cimande2.service.ItemService;4: import org.springframework.beans.factory.annotation.Autowired;5: import org.springframework.stereotype.Service;6: import org.springframework.transaction.annotation.Transactional;7:
8: /**9: *
10: * @author vick
11: */
12: @Service("itemService")13: @Transactional(readOnly = true)14: public class ItemServiceImpl implements ItemService {
15:
16: @Autowired
17: private ItemDao itemDao;18:
19: @Transactional
20: public void save(Item item) {
21: itemDao.save(item);
22: }
23:
24: @Transactional
25: public void delete(Item item) {
26: itemDao.delete(item);
27: }
28:
29: public Item getItem(String id) {30: return itemDao.findById(id);31: }
32:
33: }
- ItemController.java
1: package org.blueoxygen.cimande2.controller;2:
3:
4: import javax.servlet.http.HttpServletRequest;5: import javax.servlet.http.HttpServletResponse;6:
7: import org.blueoxygen.cimande2.service.ItemService;8: import org.blueoxygen.cimande2.ui.form.ItemForm;9: import org.blueoxygen.cimande2.ui.validator.ItemValidator;10: import org.springframework.beans.factory.annotation.Autowired;11: import org.springframework.stereotype.Controller;12: import org.springframework.validation.BindingResult;13: import org.springframework.web.bind.annotation.ModelAttribute;14: import org.springframework.web.bind.annotation.RequestMapping;15: import org.springframework.web.bind.annotation.RequestMethod;16: import org.springframework.web.servlet.ModelAndView;17: import org.springframework.web.servlet.view.RedirectView;18:
19: /**20: *
21: * @author vick
22: */
23: @Controller
24: public class ItemController{
25:
26: @Autowired private ItemService itemService;27: @RequestMapping(value="/item", method=RequestMethod.GET)28: public ModelAndView item(HttpServletRequest request, HttpServletResponse response) throws Exception{
29: ModelAndView mv = new ModelAndView();30: mv.addObject("item", new ItemForm());31: mv.setViewName("item/item-add");32: return mv;33: }
34:
35: @RequestMapping(value="/item", method=RequestMethod.POST)36: public ModelAndView item(HttpServletRequest request, @ModelAttribute("item") ItemForm item, BindingResult bindingResult){
37: new ItemValidator().validate(item, bindingResult);38: if(bindingResult.hasErrors()){39: ModelAndView mv = new ModelAndView();40: mv.addObject("item", item);41: mv.setViewName("item/item-add");42: return mv;43: }else{44: itemService.save(item.getItem());
45: return new ModelAndView(new RedirectView(request.getContextPath()+"/view/item/"+ item.getId()));
46: }
47:
48: }
49: }
- web.xml
1: <?xml version="1.0" encoding="UTF-8"?>
2: <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
3: <display-name>rest-springmvc</display-name>
4: <context-param>
5: <param-name>contextConfigLocation</param-name>
6: <param-value>classpath:applicationContext.xml</param-value>
7: </context-param>
8: <listener>
9: <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
10: </listener>
11: <servlet>
12: <servlet-name>dispatcher</servlet-name>
13: <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
14: <load-on-startup>2</load-on-startup>
15: </servlet>
16: <servlet-mapping>
17: <servlet-name>dispatcher</servlet-name>
18: <url-pattern>/*</url-pattern>19: </servlet-mapping>
20: <session-config>
21: <session-timeout>30</session-timeout>
22: </session-config>
23: <welcome-file-list>
24: <welcome-file>index.xhtml</welcome-file>
25: </welcome-file-list>
26: </web-app>
- dispatcher-servlet.xml
1: <?xml version="1.0" encoding="UTF-8"?>
2: <beans xmlns="http://www.springframework.org/schema/beans"3: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"4: xmlns:p="http://www.springframework.org/schema/p"5: xmlns:context="http://www.springframework.org/schema/context"6: xsi:schemaLocation="7: http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd8: http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">9: <context:component-scan base-package="org.blueoxygen.cimande2.controller" />
10: <bean id="velocityConfig"11: class="org.springframework.web.servlet.view.velocity.VelocityConfigurer"
12: p:resourceLoaderPath="/WEB-INF/velocity/"/>13: <bean id="viewResolver"14: class="org.springframework.web.servlet.view.velocity.VelocityViewResolver"
15: p:cache="true"16: p:prefix=""
17: p:suffix=".xhtml"/>18: <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
19: <property name="maxUploadSize" value="10000000"/>
20: </bean>
21:
22:
23: <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver" p:order="1">
24: <property name="mediaTypes">25: <map>
26: <entry key="json" value="application/json"/>
27: </map>
28: </property>
29: </bean>
30:
31: <bean id="messageSource"32: class="org.springframework.context.support.ResourceBundleMessageSource"
33: p:basename="messages" />34: </beans>
-
- Berikut adalah contoh implementasi rest pada spring 3 mvc versi saya.
Untuk kurang lebihnya saya mohon maaf dan terimakasih.- Next Week---> validator pada spring 3 mvc rest
JSON in Rest Spring MVC
library json yang di pakai : - jackson-core-asl-1.5.2.jar - jackson-mapper-asl-1.5.2.jar
tambahkan kode dibawah ini pada dispatcher-servlet.xmlhasil:
gampang kan !!! :D Good Luck
Ireport - Membatasi Baris Yang di Print Tiap Halaman
Pada kondisi biasa ireport akan mencetak baris pada halaman pertaman dan bila tidak cukup akan dilanjutkan pada halaman kedua. Hasilnya pasti tidak rapi. Oleh karena itu saya akan menjelaskan cara mengatur jumlah baris tiap halaman.
Pertama tama buat Report Group baru seperti gambar di bawah ini:
Pada Group Criteria isi Group following by expression :
new Integer((int)(($V{REPORT_COUNT}.intValue()-1)/10)) --> 10 adalah batas baris tiap halaman
klik next -> finish (pastikan group header dan footer telah anda check )
check "Start on new page" pada properties group yang telah di buat
ubah band height pada group header dan footer yang dibuat menjadi 0.
hasil:
Good Luck