devprg

call javascript from applet

Posted in Applet, Java, Javascript by devprg on 08.07.2009

Kunci melakukan hal ini adalah class : ‘netscape.javascript.JSObject‘. Class ini terdapat dalam ‘plugin.jar‘.

Berikut script yang terdapat di JSP/JSPX/HTML:


function calledByJava()
{
    alert("should be calledByJava");
}

Berikut code dalam applet yang melakukan pemanggilan:


private void btnLiveConnectActionPerformed(ActionEvent evt) {
    /*
    * objective, dari sini bisa memanggil ADF event
    */
    JSObject window = JSObject.getWindow(this);
    window.eval("calledByJava();");
}

Telah dicoba dan berhasil di Internet Explorer 6, Firefox 3.5, Opera 9.64

reference : https://jdk6.dev.java.net/plugin2/liveconnect/

Tagged with: , , ,

call applet public method from javascript

Posted in Applet, Java, Javascript by devprg on 07.07.2009

Berikan ini potongan code applet (Java)

public class LiveConnectLabApplet extends javax.swing.JApplet
{
public void doTrigger()
{
// ... ...
}
}

Berikut ini definisi applet di jsp/jspx/html:

<applet id="LiveConnectApp" name="LiveConnectApp" archive="printpdf.jar"  code="pdfrendererlab.LiveConnectLabApplet" codebase="../commonapplet/" height="256" width="256" mayscript="mayscript">

</applet>

Pemanggilan method public applet dengan javascript berikut hanya bekerja di Internet Explorer 6 :

<script type="text/javascript">
function callJavaTrigger()
{
LiveConnectApp.doTrigger();
}
</script>

Dengan sedikit perubahan method diatas bisa berjalan di Firefox 3.5 dan Opera 9.65 :

<script type="text/javascript">
function callJavaTrigger()
{
document.applets.LiveConnectApp.doTrigger();
}
</script>

Hanya penambahan ‘document.applets.’.. aaarrgh.. bikin pusing aja…!!

reference : https://jdk6.dev.java.net/plugin2/liveconnect/

Tagged with: , ,

applet library location

Posted in Applet, General Web App, Java by devprg on 06.07.2009

dimanakah menempatkan library (JAR) yang digunakan oleh applet? apakah harus diletakkan dalam WEB-INF/lib seperti umumnya jar untuk aplikasi web lain?

Perhatikan perbedaan ini : Servlet dieksekusi di server. Applet dieksekusi di client. Karena servlet dieksekusi di server, maka servlet bisa mengakses library yang terdapat di WEB-INF/lib.

WEB-INF/lib memiliki sifat tidak bisa diakses dari luar web aplikasi. Oleh karena applet dianggap sebagai aplikasi client, maka applet tidak bisa mengakses library yang ada di WEB-INF/lib. Oleh karena itu, library JAR untuk applet diletakkan di folder biasa seperti file JSP/JSPX lainnya.

LiveConnect API

Posted in Applet, Javascript by devprg on 04.07.2009

Sedang mencari metode komunikasi antara Javascript dengan Java Applet. Search dengan Yahoo memberikan petunjuk mengenai LiveConnect API yang sudah ada sejak zaman Netscape, lalu akhir-akhir ini hidup kembali.

beberapa link:

  • http://java.sun.com/products/plugin/1.3/docs/jsobject.html
  • http://trephine.org/t/index.php?title=Understanding_LiveConnect
  • https://developer.mozilla.org/en/LiveConnect
  • http://en.wikipedia.org/wiki/LiveConnect
  • http://www.ajaxprojects.com/ajax/tutorialdetails.php?itemid=410
  • http://www.nusphere.com/kb/jscoreguide/lc.html?

Mungkin bermanfaat bagi yang memerlukan komunikasi antara Javascript dengan Java.

direct printing 2

Posted in ADF, Applet, JDev 10.1.3.3 by devprg on 04.07.2009

Library pencetak PDF menggunakan ‘pdfrenderer’.

Supaya Jasperreport mencetak PDF hasil ke suatu direktori di server gunakan method berikut: ‘JasperRunManager.runReportToPdfFile’

Umumnya aplikasi j2ee dijalankan dari dalam WAR atau EAR, maka supaya tersedia direktori tempat penyimpanan data harus disiapkan suatu direktori tersendiri di server. Definisikan path ke direktori tersebut menggunakan tag ‘<context-param>’ di ‘web.xml’ sbb:

<context-param>
<param-name>jdevlab.REPORT_DIR</param-name>
<param-value>f:/temp/adfupload</param-value>
</context-param>

Untuk OS Linux, harus disesuaikan nama nama direktori. misalnya ‘/app/user/report’. Pastikan OAS mendapat hak akses untuk read write ke direktori tersebut.

Untuk memperoleh nilai direktori tersebut gunakan statement berikut di backing bean:


FacesContext context = FacesContext.getCurrentInstance();
 ServletContext sc = (ServletContext) context.getExternalContext().getContext();
 String strOutputFile = sc.getInitParameter("jdevlab.REPORT_DIR") + "/result.pdf";

Nama file report yang dihasilkan di beritahukan ke applet menggunakan applet parameter sbb:

<f:verbatim>
<applet archive="printpdf.jar" code="pdfrendererlab.PdfPrint"
 codebase="../commonapplet/" height="35" width="75">
<param name="FILENAME"
 value="${backing_report_testReport.outputFileName}"/>
</applet>
</f:verbatim>

Perhatikan EL yang digunakan menggunakan awalan ‘$’, bukan ‘#’ seperti umumnya pada aplikasi JSF/ADF. Pada Jdev 10.1.3.3 EL yang menggunakan awalan ‘#’ pada bagian content ‘f:verbatim’ tidak dievaluasi. Mungkin karena bagian yang terdapat dalam ‘f:verbatim’ dianggap sebagai JSP biasa.

Untuk menghandle request print dari Applet digunakan Servlet. Berikut configurasi servlet di ‘web.xml’:


<servlet>
 <servlet-name>ReportPdfServlet</servlet-name>
 <servlet-class>lab.view.servlet.ReportPdfServlet</servlet-class>
 </servlet>

<servlet-mapping>
 <servlet-name>ReportPdfServlet</servlet-name>
 <url-pattern>/reportdir/*</url-pattern>
 </servlet-mapping>

to be continued

direct printing 1

Posted in ADF, Applet, General Web App by devprg on 02.07.2009

Tujuan: dari aplikasi web j2ee, server bisa mencetak pada printer yang terpasang pada komputer client. Misalnya pembuatan report dilakukan dengan jasperreport. Jasperreport dieksekusi di server lalu hasilnya langsung tercetak printer client.

Upaya pencarian melalui Google dan Yahoo menghasilkan pendapat umum sbb:

  • PHP versi windows bisa mengerjakan hal tersebut. (Belum dibuktikan)
  • Aplikasi web tidak diperbolehkan mengerjakan hal tersebut, karena itu berarti lubang pada security. Bayangkan ketika kita mengakses Yahoo lalu tiba-tiba server Yahoo bisa mencetak di printer kita.
  • Ada beberapa solusi komersial non opensource dengan harga kira-kira $ 8000 per server.
  • Belum ada solusi open source yang cukup memuaskan.
  • Belum tahu apakah Javascript punya fasilitas direct printing

Setelah berdiskusi dengan Google dan Yahoo,  diperoleh ide dasar untuk membuat solusi sederhana masalah ini sbb:

  • Jasperreport menghasilkan report dalam format PDF di server
  • Karena applet bisa mengakses printer, maka dibuat applet yang bisa membaca dari direktori server dan mengirimnya ke printer.
  • Supaya applet bisa mengirim pdf ke printer, maka harus dicari library-library yang bisa melakukan pencetakan PDF
  • Setelah selesai mencetak, bila diharuskan, hapus file PDF yang terletak di webserver

Ketika ditanya mengenai library java yang mencetak PDF, Google dan Yahoo sepakat memberikan alternatif:

  • pdfbox
  • icepdf
  • pdfrenderer
  • dll, maksudnya ada yang lain tetapi belum menarik untuk dieksplorasi lebih lanjut

Ketika framework j2ee yang digunakan untuk membangun aplikasi adalah ADF, isu-isu ini timbul:

  • Bagaimana applet bisa memerintahkan server untuk mencetak report?
  • Bagaimana ADF bisa memberitahu applet apa nama report yang dihasilkan dan dimana lokasinya. Pertanyaan dimana lokasinya juga terkait dengan kebiasaan ADF menggunakan nama folder ‘faces’ yang merupakan folder virtual. Contoh : http://nama_server/nama_app/faces/thepage.jspx  Apakah ini akan menimbulkan masalah???
  • Bagaimana kalau aplikasi tersebut dijalankan dari dalam WAR atau EAR? Apakah proses penulisan file akan tetap normal seperti bila dijalankan dari exploded app?
    Ikuti

    Get every new post delivered to your Inbox.