Showing posts with label grails. Show all posts
Showing posts with label grails. Show all posts

Wednesday, August 31, 2016

Show error on grails domain class

When saving the a domain class and the data is not saved to the database, we can trace with this code :


if (!myDomainObj.save()) {
   log.warn myDomainObj.errors.allErrors.join(' \n') //each error is an instance of  org.springframework.validation.FieldError    
}

reference : http://stackoverflow.com/questions/4765037/why-doesnt-grails-notify-me-of-error-at-domain-object-saving

Tuesday, May 26, 2015

Grails / GORM database mapping Money data type on Microsoft SQL Server

import java.math.BigDecimal
class Cloth {
    ...
    BigDecimal price
    ...
    static mapping = {
        price sqlType: "money"
    }
}

reference : https://msdn.microsoft.com/en-us/library/ms378878(v=sql.110).aspx
remember, grails is java too :D

Friday, October 17, 2014

Grails Spring Security no password encoding

http://stackoverflow.com/questions/8465016/spring-security-no-password-encoding

t's a really really bad idea in general, but if you have a use case for it then it is doable. Override the passwordEncoder bean in grails-app/conf/spring/resources.groovy:

import org.springframework.security.authentication.encoding.PlaintextPasswordEncoder

beans = {
   passwordEncoder(PlaintextPasswordEncoder)
}

Wednesday, July 23, 2014

Jasper Applet in Grails

I want to view the report from web browser, something like :

First, download jasper report source project in this article I use jasper 5.6.0 and download from this link : http://sourceforge.net/projects/jasperreports/files/jasperreports/JasperReports%205.6.0/jasperreports-5.6.0-project.zip/download After download extract the file and go to sample directory (jasperreports-5.6.0\demo\samples) from command prompt / shell terminal and compile using ant (ant.apache.org). To compile the sample just run : ant

Copy files from folder jasperreports-5.6.0\demo\samples\webapp\applets :
  • commons-collections-3.2.1.jar
  • commons-logging-1.1.1.jar
  • jasperreports-applet-5.6.0.jar
  • JRViewerSimple.class
  • EmbeddedViewerApplet.class
Copy to web-app\applets folder (in our grails project)

Create a controller that send an octet-stream, my controller : 

import javax.servlet.ServletOutputStream
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;

class LaporanController {

 def dataSource
    

 def embedbarang() {

  String namaFile, reportName, dotJasper
  namaFile = "barang"

      reportName = grailsApplication.getMainContext().getResource('reports/' + namaFile + '.jrxml').file.getAbsoluteFile()
      dotJasper = grailsApplication.getMainContext().getResource('reports/' + namaFile + '.jasper').file.getAbsoluteFile()

  // compiles jrxml
  JasperCompileManager.compileReportToFile(reportName);
  // fills compiled report with parameters and a connection
  // JasperPrint print = JasperFillManager.fillReport(reportName + ".jasper", parameters, connection);
  JasperPrint print = JasperFillManager.fillReport(dotJasper, null, dataSource.getConnection());


  response.setContentType("application/octet-stream");
  ServletOutputStream outputStream = response.getOutputStream();
  
  ObjectOutputStream oos = new ObjectOutputStream(outputStream);
  oos.writeObject(print);
  oos.flush();
  oos.close();

  outputStream.flush();
  outputStream.close();

 }

}
Load the applet from .gsp file :

For copy-paste purpose :
<APPLET  CODE = "EmbeddedViewerApplet.class" codebase="${request.contextPath}/applets"  ARCHIVE = "jasperreports-applet-5.6.0.jar,commons-logging-1.1.1.jar,commons-collections-3.2.1.jar" WIDTH = "100%" HEIGHT = "600"></XMP>
    <PARAM NAME = CODE VALUE = "EmbeddedViewerApplet.class" >
    <PARAM NAME = CODEBASE VALUE = "${request.contextPath}/applets" >
    <PARAM NAME = ARCHIVE VALUE = "jasperreports-applet-5.6.0.jar,commons-logging-1.1.1.jar,commons-collections-2.1.1.jar" >

    <PARAM NAME="type" VALUE="application/x-java-applet;version=1.2.2">
    <PARAM NAME="scriptable" VALUE="false">
    <PARAM NAME = "REPORT_URL" VALUE ="${request.contextPath}/laporan/embedbarang">
</APPLET>



NB:

Sunday, July 20, 2014

Grails using jasper report without plugin

This snippet is used to generate .pdf file and the send the byte array to the browser, so the user can print the .pdf directly to the printer. I use jasper report to generate the .pdf file. My grails version is 2.4.2. First, download the necessary .jar file, I use this version of jar :

  • commons-beanutils-1.9.2.jar
  • commons-collections-3.2.jar
  • commons-digester-2.1.jar
  • commons-logging-1.2.jar
  • itext-2.1.7.jar
  • jasperreports-5.6.0.jar

You can download from this link : https://drive.google.com/file/d/0B3BD2OiyeQ3UQWN2Nk82R1dhYmM/edit?usp=sharing

After download the .jar files, put those .jar file to the /lib folder. Then I use this code in my controller :

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExporter;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.export.JRPdfExporter;

class LabController {

    def dataSource
    
    def print() {
     try {
      String reportName, namaFile, dotJasper
      namaFile = "barang"
      reportName = grailsApplication.mainContext.getResource('reports/' + namaFile + '.jrxml').file.getAbsoluteFile()
      dotJasper = grailsApplication.mainContext.getResource('reports/' + namaFile + '.jasper').file.getAbsoluteFile()

      // Report parameter
      Map reportParam = new HashMap()

      // compiles jrxml
      JasperCompileManager.compileReportToFile(reportName);
      // fills compiled report with parameters and a connection
      JasperPrint print = JasperFillManager.fillReport(dotJasper, reportParam, dataSource.getConnection());

      ByteArrayOutputStream  pdfStream = new ByteArrayOutputStream();

      // exports report to pdf
      JRExporter exporter = new JRPdfExporter();
      exporter.setParameter(JRExporterParameter.JASPER_PRINT, print);
      exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, pdfStream); // your output goes here
   
      exporter.exportReport();

     } catch (Exception e) {
   
      throw new RuntimeException("It's not possible to generate the pdf report.", e); 
     } finally {
      render(file: pdfStream.toByteArray(), contentType: 'application/pdf')
     }
    }
}

Wednesday, June 25, 2014

Grails Jasper plugins - direct pdf output

I use jasper plugin (http://grails.org/plugin/jasper) in my grails application. I want to send direct pdf file to the browser.

package com.jasper

import org.codehaus.groovy.grails.plugins.jasper.JasperExportFormat
import org.codehaus.groovy.grails.plugins.jasper.JasperReportDef

class LabController {

    def jasperService
    def directpdf() {

        def reportDef = new JasperReportDef(name:'mbarang.jrxml', fileFormat:JasperExportFormat.PDF_FORMAT)
        response.contentType = 'application/pdf'
        response.outputStream << jasperService.generateReport(reportDef).toByteArray()
        return(false);
    }
}

Thursday, September 26, 2013

How to change Grails default port

If we run : grails run-app
By default the grails will listen at port : 8080

We can change by default port by run this command :
grails run-app -Dserver.port=9000
This command will make the grails listen to the port 9000

Another way is by editing the BuildConfig.groovy
Add the following line :
grails.server.port.http = 9000

NB: I use grails 2.2.4