jump to navigation

JSP Custom Tag Library Agustus 30, 2009

Posted by samsonasik in Tutorial JSP.
Tags:
3 comments

Bosan sama JSTL & Standard Action ? Gunakan Custom Tag Library Anda sendiri. Pada tutorial kali ini, saya akan memaparkan penggunaan SimpleTagSupport untuk menjalankan tag buatan kita sendiri ( tentunya ada aturan mainnya :) ). Class SimpleTagSupport mengextends Interface SimpleTag yang mengextends Interface JSPTag. Tentang method2 detail nya, mungkin bisa dicari sendiri di google, kali ini saya lebih memfokuskan pada penggunaan method doTag saja :) .

Ok, let’s start. Pertama, buat project yang struktur directory nya seperti di bawah ini. (Jika belum terbiasa menggunakan WAR (Web Application Archive) , Anda bisa gunakan ROOT directory ) :
web

Nah, kalau sudah, kita isi source code masing2.
1). wordpress.tld

<?xml version="1.0" encoding="ISO-8859-1" ?>
<taglib 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/web-jsptaglibrary_2_0.xsd"
 version="2.0">

 <tlib-version>1.2</tlib-version>
 <uri>simpletagwordpress</uri>
 <tag>
 <description>Worst use of a custom tag</description>
 <name>simpletag</name>
 <tag-class>wordpress.SamsonSimpleTag</tag-class>
 <body-content>empty</body-content>
 </tag>
</taglib>

2). SamsonSimpleTag.java

package wordpress;
import javax.servlet.jsp.tagext.*;
import javax.servlet.jsp.*;
import java.io.*;

public class SamsonSimpleTag extends SimpleTagSupport{
 public void doTag() throws JspException, IOException{
 PageContext pageContext = (PageContext) getJspContext();
 JspWriter out = pageContext.getOut();
 out.print("Test Tag Buatanku");
 }
}

And The View :
3). wordpress.jsp

<%@ taglib prefix="tagbuatanku" uri="simpletagwordpress" prefix="r"%>
<tagbuatanku:simpletag/>

<!-- agar ketika class diubah & dikompilasi ulang, otomatis reload -->
<r:reload/>

Asik kan :)
————————
referensi : Basham, Bryan ; Sierra, Kathy ; Bates, Bert : Head First Servlet & JSP

Kolaborasi Flex dan zend 1.9.0 Agustus 10, 2009

Posted by samsonasik in Flex, Tutorial PHP.
Tags:
add a comment

Akhirnya, setelah sekian lama zend 1.8 ke atas dapat dikolaborasikan dengan Flex 3. Untuk yang zend 1.8, yang menjadi masalah bukan di sisi zend-nya, tapi di sisi library amf nya. Bagi yang menggunakan zend 1.8, bisa downgrade ke amf versi 1.7 ( zend tetap pakai 1.8 ), atau upgrade ke zend 1.9.0 sekalian.

Struktur directory framework untuk kebutuhan koneksi ke zend 1.9.0 berbeda dari sebelumnya, dapat dilihat dari gambar berikut :

Di sini kita tidak butuh controller, karena sudah digantikan oleh service.

Isi file configs\application.ini :

[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH “/../library”
bootstrap.path = APPLICATION_PATH “/Bootstrap.php”
bootstrap.class = “Bootstrap”
resources.db.adapter = “PDO_MYSQL”
resources.db.params.host = “localhost”
resources.db.params.username = “root”
resources.db.params.password = “”
resources.db.params.dbname = “test”

[staging : production]
resources.db.params.dbname = “test”

[testing : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
resources.db.params.dbname = “test”

[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
resources.db.params.dbname = “test”

Untuk Bootstrap file :
<?php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{

protected function _initAutoload()
{

$autoloader = new Zend_Application_Module_Autoloader(array(

‘namespace’ => ”,

‘basePath’ => dirname(__FILE__),

));

return $autoloader;
}

}

Untuk contoh isi file models : (asumsi ada table bernama testaa, field-fieldnya id dan nama)
<?php
class Model_Testaa extends Zend_Db_Table
{
protected $_name = “testaa”;
protected $_primary = “id”;
}

Untuk penjabaran field-field table, kita definisikan di class TestaaClass (contoh) di directory services :
<?php
class TestaaClass
{
var $id ;
var $nama;
}

Nah, untuk servicenya :
<?php
require_once(‘TestaaClass.php’);

class TestaaService {

private $testaa;

public function __construct()
{
$this->testaa = new Model_Testaa();
}

public function getData()
{

$result = array();
foreach($this->testaa->fetchAll() as $key=>$val)
{

$testaaobj = new TestaaClass();
$testaaobj->id = $val->id;
$testaaobj->nama = $val->nama;

$result[] = $testaaobj;
}
return $result;
}

public function removeData($idField)
{
$currentTestaa = $this->testaa->find($idField)->current();
$currentTestaa->delete();
}

public function addData($namanya)
{

$data = array(‘nama’ =>$namanya);
$this->testaa->insert($data);
}

public function editData($id, $namanya)
{

$row = $this->testaa->find($id)->current();
$row->nama = $namanya;
$row->save();
}
}

Untuk index.php :

<?php

defined(‘APPLICATION_PATH’) || define(‘APPLICATION_PATH’, realpath(dirname(__FILE__) . ‘/../application’));
defined(‘APPLICATION_ENV’) || define(‘APPLICATION_ENV’, (getenv(‘APPLICATION_ENV’) ? getenv(‘APPLICATION_ENV’) : ‘production’));
set_include_path(implode(PATH_SEPARATOR, array(
realpath(APPLICATION_PATH . ‘/../library’),
get_include_path(),
)));

require_once ‘Zend/Loader/Autoloader.php’;
$autoloader = Zend_Loader_Autoloader::getInstance();

$application = new Zend_Application(
APPLICATION_ENV,
APPLICATION_PATH . ‘/configs/application.ini’
);

$application->bootstrap();

$server = new Zend_Amf_Server();
$server->addDirectory(‘./services/’);
echo($server->handle());

Nah, sekarang, untuk di flex nya, struktur nya sama seperti pada dokumentasi sebelumnya :

Jangan lupa setting compiler settingnya :

Untuk konfigurasi service-config.xml nya :
<?xml version=”1.0″ encoding=”UTF-8″?>

<services-config>

<services>

<service id=”amfphp-flashremoting-service” class=”flex.messaging.services.RemotingService” messageTypes=”flex.messaging.messages.RemotingMessage”>

<destination id=”zendamf”>

<channels>

<channel ref=”myamfphp”/>

</channels>

<properties>

<source>*</source>

</properties>

</destination>

</service>

</services>

<channels>

<channel-definition id=”myamfphp” class=”mx.messaging.channels.AMFChannel”>

<endpoint uri=”../zf190_amf/public/index.php” class=”flex.messaging.endpoints.AMFEndpoint”/>

</channel-definition>

</channels>

</services-config>

Terakhir, isi source mxml kita :

<?xml version=”1.0″ encoding=”utf-8″?>

<mx:Application xmlns:mx=”http://www.adobe.com/2006/mxml” layout=”vertical”

creationComplete=”getDataExample()”>

<mx:RemoteObject id=”remoteExample” destination=”zendamf” source=”TestaaService”

showBusyCursor=”true” fault=”faultListener(event)”>

<mx:method name=”getData” result=”getDataListener(event)”/>

</mx:RemoteObject>

<mx:Script>

<![CDATA[

import mx.controls.Alert;

import mx.rpc.events.FaultEvent;

import mx.rpc.events.ResultEvent;

import mx.collections.ArrayCollection;

//siapkan array

[Bindable]

private var exampledata :ArrayCollection;

[Bindable]

private var idnya :Number;

private function getDataListener(event:ResultEvent):void

{

exampledata = new ArrayCollection(event.result as Array) ;

}

private function faultListener(event:FaultEvent):void

{

Alert.show(event.fault.message, “Error”);

}

private function getDataExample():void

{

//load data

remoteExample.getData();

}

]]>

</mx:Script>

<mx:DataGrid id=”myGrid” dataProvider=”{exampledata}”>

<mx:columns>

<mx:DataGridColumn headerText=”id” dataField=”id” draggable=”true” />

<mx:DataGridColumn headerText=”nama” dataField=”nama” draggable=”true”/>

</mx:columns>

</mx:DataGrid>

</mx:Application>

Hasil akhirnya :

Kalau dicoba seperti ini sudah jalan, berarti kita sudah berhasil :)

backup and restore di mysql via command line Agustus 6, 2009

Posted by samsonasik in Uncategorized.
2 comments

Karena keterbatasan phpmyadmin dalam mengeksekusi stored procedure , view, dan trigger, maka kita bisa menggunakan cara lama, yaitu via command line, he.he..

Untuk Linux(dengan web container lampp, kita harus setting dulu, bisa ditambahkan di rc.local )

mkdir /var/run/mysqld

ln -s /opt/lampp/var/mysql/mysql.sock /var/run/mysqld/mysqld.sock

mkdir /var/lib/mysql

ln -s /opt/lampp/var/mysql/mysql.sock /var/lib/mysql/mysql.sock

Untuk mysqldump :

a. di windows :

b. di Linux

Untuk restore :

a. di windows :

b. di Linux: