JSP Custom Tag Library Agustus 30, 2009
Posted by samsonasik in Tutorial JSP.Tags: jsp taglib
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 ) :

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: flex and zend
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 :
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:

