<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6668187747812565658</id><updated>2011-08-04T02:19:37.662+07:00</updated><category term='Debugging'/><category term='jQuery'/><category term='Spring'/><category term='Velocity'/><category term='Javascript'/><title type='text'>CodeQ</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://codeq.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6668187747812565658/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://codeq.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>baabullah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-D-5HxyxGO_U/TcaOSK2C1oI/AAAAAAAAAiw/p8i7h44o_TU/s220/laughing_baby.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>14</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6668187747812565658.post-8903370204893022759</id><published>2010-06-17T15:22:00.000+07:00</published><updated>2010-06-17T15:22:00.456+07:00</updated><title type='text'>Cek Apakah Sebuah Bilangan Memiliki Angka Desimal</title><content type='html'>&lt;p&gt;Dapet dari source code something and everything, untuk mengecek apakah sebuah bilangan double memiliki angka desimal dibelakang koma&lt;/p&gt;

&lt;pre class="code"&gt;
public boolean hasDecimal(double d) {
 double t = d - (int) d;
 return Double.compare(t, 0) != 0;
}
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6668187747812565658-8903370204893022759?l=codeq.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeq.blogspot.com/feeds/8903370204893022759/comments/default' title='Poskan Komentar'/><link rel='replies' type='text/html' href='http://codeq.blogspot.com/2010/06/cek-apakah-sebuah-bilangan-memiliki.html#comment-form' title='0 Komentar'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6668187747812565658/posts/default/8903370204893022759'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6668187747812565658/posts/default/8903370204893022759'/><link rel='alternate' type='text/html' href='http://codeq.blogspot.com/2010/06/cek-apakah-sebuah-bilangan-memiliki.html' title='Cek Apakah Sebuah Bilangan Memiliki Angka Desimal'/><author><name>baabullah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-D-5HxyxGO_U/TcaOSK2C1oI/AAAAAAAAAiw/p8i7h44o_TU/s220/laughing_baby.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6668187747812565658.post-4423349129444419846</id><published>2010-01-17T10:05:00.000+07:00</published><updated>2010-01-17T10:06:01.276+07:00</updated><title type='text'>PHP Tanpa Tag Penutup</title><content type='html'>&lt;p&gt;Di milis something and everything ada yang nanya kenapa pada beberapa file di framework CodeIgniter, Zend ngga ada tutup &amp;lt;?php nya. Sebenarnya saya juga penasaran sih kok begitu ya? Sontak lah para gegedug milis menjawabnya dengan aroma yang sama sebagai berikut:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Kalo menurut framework tetangga..alias framework zend untuk menghindari error ketika kita mengetik ?&amp;gt; tetapi ada space kosong setelah ?&amp;gt;...nah kalo gak di kasih ya otomatis error itu terhindari.&lt;/li&gt; &lt;li&gt;Supaya ga ada white space. load viewnya pake output buffering&lt;/li&gt; &lt;li&gt;Karena di situ sedang tidak pada posisi perlu balik ke HTML mode lagi&lt;/li&gt; &lt;li&gt;dari &lt;a href="http://framework.zend.com/manual/en/coding-standard.php-file-formatting.html"&gt;Zend Coding Standard&lt;/a&gt; : For files that contain only PHP code, the closing tag (&amp;quot;?&amp;gt;&amp;quot;) is never permitted. It is not required by PHP, and omitting it´ prevents the accidental injection of trailing white space into the response&lt;/li&gt; &lt;li&gt;&lt;a href="http://codeigniter.com/user_guide/general/styleguide.html#php_closing_tag"&gt;CodeIgniter Style Guide&lt;/a&gt; : The PHP closing tag on a PHP document *?&amp;gt;* is optional to the PHP parser. However, if used, any whitespace following the closing tag, whether introduced by the developer, user, or an FTP application, can cause unwanted output, PHP errors, or if the latter are suppressed, blank pages. For this reason, all PHP files should *OMIT* the closing PHP tag, and instead use a comment block to mark the end of file and it's location relative to the application root. This allows you to still identify a file as being complete and not truncated.&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;Ooo jadi gitu tooh..&lt;/p&gt;   &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6668187747812565658-4423349129444419846?l=codeq.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeq.blogspot.com/feeds/4423349129444419846/comments/default' title='Poskan Komentar'/><link rel='replies' type='text/html' href='http://codeq.blogspot.com/2010/01/php-tanpa-tag-penutup.html#comment-form' title='0 Komentar'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6668187747812565658/posts/default/4423349129444419846'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6668187747812565658/posts/default/4423349129444419846'/><link rel='alternate' type='text/html' href='http://codeq.blogspot.com/2010/01/php-tanpa-tag-penutup.html' title='PHP Tanpa Tag Penutup'/><author><name>baabullah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-D-5HxyxGO_U/TcaOSK2C1oI/AAAAAAAAAiw/p8i7h44o_TU/s220/laughing_baby.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6668187747812565658.post-7069188291674466942</id><published>2010-01-10T22:53:00.002+07:00</published><updated>2010-01-10T22:56:26.431+07:00</updated><title type='text'>Integrating Zend and Smarty</title><content type='html'>&lt;p&gt;Two easy step to integrating Zend Framework and Smarty Template Engine.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="#implementation"&gt;Implement Zend_View_Interface&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#configuration"&gt;Configure ViewRenderer Helper&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h5 id="implementation"&gt;Simple Zend_View_Interface Implementation&lt;/h5&gt;

&lt;pre class="code"&gt;
&amp;lt;?php
require_once 'Zend/View/Interface.php';
require_once 'Smarty/Smarty.class.php';

/**
 * Simple implementation for Zend View Interface using Smarty Template Engine
 * 
 * @author fridayana baabullah
 */
class App_View_Smarty implements Zend_View_Interface{
 
 /**
  * @var Smarty
  */
 private $smarty;
 
 public function __construct($base) {
  /* Set up Smarty as usual */
  
  $this-&amp;gt;smarty = new Smarty();  
  $this-&amp;gt;smarty-&amp;gt;template_dir = $base . 'templates';
  $this-&amp;gt;smarty-&amp;gt;compile_dir  = $base . 'templates_c'; 
  $this-&amp;gt;smarty-&amp;gt;config_dir   = $base . 'configs';
  $this-&amp;gt;smarty-&amp;gt;cache_dir    = $base . 'cache';
 }
 
    /**
     * Return the template engine object, if any
     *
     * If using a third-party template engine, such as Smarty, patTemplate,
     * phplib, etc, return the template engine object. Useful for calling
     * methods on these objects, such as for setting filters, modifiers, etc.
     *
     * @return Smarty
     */
    public function getEngine() {
     return $this-&amp;gt;smarty;
    }

    /**
     * Set the path to find the view script used by render()
     *
     * @param string|array The directory (-ies) to set as the path. Note that
     * the concrete view implentation may not necessarily support multiple
     * directories.
     * @return void
     */
    public function setScriptPath($path) {
     if (is_readable($path)) {
            $this-&amp;gt;smarty-&amp;gt;template_dir = $path;            
        }
    }

    /**
     * Retrieve all view script paths
     *
     * @return array
     */
    public function getScriptPaths() {
     return array($this-&amp;gt;smarty-&amp;gt;template_dir);
    }

    /**
     * Set a base path to all view resources
     *
     * @param  string $path
     * @param  string $classPrefix
     * @return void
     */
    public function setBasePath($path, $classPrefix = 'Zend_View') {
     return $this-&amp;gt;setScriptPath($path);
    }

    /**
     * Add an additional path to view resources
     *
     * @param  string $path
     * @param  string $classPrefix
     * @return void
     */
    public function addBasePath($path, $classPrefix = 'Zend_View') {
     // Ignored! Cannot add additional path to smarty
    }

    /**
     * Assign a variable to the view
     *
     * @param string $key The variable name.
     * @param mixed $val The variable value.
     * @return void
     */
    public function __set($key, $val) {
     $this-&amp;gt;smarty-&amp;gt;assign($key, $val);
    }

    /**
     * Allows testing with empty() and isset() to work
     *
     * @param string $key
     * @return boolean
     */
    public function __isset($key) {
     return $this-&amp;gt;smarty-&amp;gt;get_config_vars($key) !== null;
    }

    /**
     * Allows unset() on object properties to work
     *
     * @param string $key
     * @return void
     */
    public function __unset($key) { 
     $this-&amp;gt;smarty-&amp;gt;clear_assign($key);
    }

    /**
     * Assign variables to the view script via differing strategies.
     *
     * Suggested implementation is to allow setting a specific key to the
     * specified value, OR passing an array of key =&amp;gt; value pairs to set en
     * masse.
     *
     * @see __set()
     * @param string|array $spec The assignment strategy to use (key or array of key
     * =&amp;gt; value pairs)
     * @param mixed $value (Optional) If assigning a named variable, use this
     * as the value.
     * @return void
     */
    public function assign($spec, $value = null) {
     if (is_array($spec)) {
            $this-&amp;gt;smarty-&amp;gt;assign($spec);
            return;
        }

        $this-&amp;gt;smarty-&amp;gt;assign($spec, $value);
    }

    /**
     * Clear all assigned variables
     *
     * Clears all variables assigned to Zend_View either via {@link assign()} or
     * property overloading ({@link __get()}/{@link __set()}).
     *
     * @return void
     */
    public function clearVars() {
     return $this-&amp;gt;smarty-&amp;gt;clear_all_assign();
    }

    /**
     * Processes a view script and returns the output.
     *
     * @param string $name The script script name to process.
     * @return string The script output.
     */
    public function render($name) {
     return $this-&amp;gt;smarty-&amp;gt;fetch($name);
    }
}
&lt;/pre&gt;

&lt;h5 id="configuration"&gt;Configure ViewRenderer Helper&lt;/h5&gt;

&lt;pre class="code"&gt;
require_once 'App/View/Smarty.php';
require_once 'Zend/Controller/Action/HelperBroker.php';
require_once 'Zend/Controller/Action/Helper/ViewRenderer.php';

$view = new App_View_Smarty('/opt/project/smarty/');
$viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer($view);
$viewRenderer-&amp;gt;setViewSuffix('tpl');

Zend_Controller_Action_HelperBroker::addHelper($viewRenderer);
&lt;/pre&gt;

&lt;p&gt;Your controller code is remain the same:&lt;/p&gt;

&lt;pre class="code"&gt;
require_once 'App/Controller/Base.php';

/**
 * Default action controller
 *
 */
class IndexController extends App_Controller_Base {  
    public function indexAction() { 
     $this-&amp;gt;view-&amp;gt;assign('first_name', 'fridayana');
 $this-&amp;gt;view-&amp;gt;last_name = 'baabullah';
    }
}
&lt;/pre&gt;

&lt;p&gt;Here is the smarty template file (index.tpl):&lt;/p&gt;

&lt;pre class="code"&gt;
Hello {$first_name} {$last_name}
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6668187747812565658-7069188291674466942?l=codeq.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeq.blogspot.com/feeds/7069188291674466942/comments/default' title='Poskan Komentar'/><link rel='replies' type='text/html' href='http://codeq.blogspot.com/2010/01/integrating-zend-and-smarty.html#comment-form' title='0 Komentar'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6668187747812565658/posts/default/7069188291674466942'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6668187747812565658/posts/default/7069188291674466942'/><link rel='alternate' type='text/html' href='http://codeq.blogspot.com/2010/01/integrating-zend-and-smarty.html' title='Integrating Zend and Smarty'/><author><name>baabullah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-D-5HxyxGO_U/TcaOSK2C1oI/AAAAAAAAAiw/p8i7h44o_TU/s220/laughing_baby.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6668187747812565658.post-5232959468805083224</id><published>2009-12-12T13:33:00.002+07:00</published><updated>2009-12-12T13:33:47.146+07:00</updated><title type='text'>Specification Pattern untuk Validasi</title><content type='html'>&lt;blockquote&gt;
A specification pattern outlines a unit of business logic that is combinable with other business logic units. In this pattern, a unit of business logic inherits its functionality from the abstract aggregate Composite Specification class. The Composite Specification class has one function called IsSatisfiedBy that returns a boolean value. After instantiation, the specification is "chained" with other specifications, making new specifications easily maintainable, yet highly customizable business logic. Furthermore upon instantiation the business logic may, through method invocation or inversion of control, have its state altered in order to become a delegate of other classes such as a persistence repository.
&lt;/blockquote&gt;

&lt;h5&gt;Specification Interface&lt;/h5&gt;

&lt;p&gt;Setiap specification harus mengimplementasikan interface ini&lt;/p&gt;

&lt;pre class="code"&gt;
interface Mox_Util_Specification_Interface
{
 public function isSatisfied();
 public function getMessage();
 public function setMessage($message);
}
&lt;/pre&gt;

&lt;h5&gt;Specification Base Class&lt;/h5&gt;

&lt;p&gt;Base class ini menyediakan default implementasi untuk method terkait dengan message&lt;/p&gt;

&lt;pre class="code"&gt;
abstract class Mox_Util_Specification_Base implements Mox_Util_Specification_Interface
{
 private $message;
 
 public function __construct($message = '')
 {
  $this-&amp;gt;message = $message;
 }
 
 public function getMessage()
 {
  return $this-&amp;gt;message;
 }
 
 public function setMessage($message)
 {
  $this-&amp;gt;message = $message;
 }
}
&lt;/pre&gt;

&lt;h5&gt;Composite Specification&lt;/h5&gt;

&lt;p&gt;Kelas ini mendukung composite specification&lt;/p&gt;

&lt;pre class="code"&gt;
class Mox_Util_Specification_Composite extends Mox_Util_Specification_Base
{
 private $specs;
 
 public function __construct()
 {
  parent::__construct();
  $this-&amp;gt;specs = array();
 }
 
 public function addSpecification($spec)
 {
  array_push($this-&amp;gt;specs, $spec);
 }
 
 public function clear()
 {
  $this-&amp;gt;specs = array();
 }
 
 public function isSatisfied()
 {
  foreach ($this-&amp;gt;specs as $spec) {
   if (! $spec-&amp;gt;isSatisfied()) {
    $this-&amp;gt;setMessage($spec-&amp;gt;getMessage());
    return false; 
   }
  }
  
  return true;
 }
}
&lt;/pre&gt;

&lt;h5&gt;Domain Specification&lt;/h5&gt;

&lt;p&gt;Spesifikasi ini akan terpenuhi jika &lt;code&gt;$target&lt;/code&gt; ada di dalam array &lt;code&gt;$domain&lt;/code&gt;&lt;/p&gt;

&lt;pre class="code"&gt;
class Mox_Util_Specification_Domain extends Mox_Util_Specification_Base
{
 private $target;
 private $domain;
 
 public function __construct($target, $domain, $message = 'violating domain rule')
 {
  parent::__construct($message);
  $this-&amp;gt;target =  $target;
  $this-&amp;gt;domain = $domain;
 }
 
 
 public function isSatisfied()
 {  
  return in_array($this-&amp;gt;target, $this-&amp;gt;domain); 
 }
}
&lt;/pre&gt;

&lt;h5&gt;Match Specification&lt;/h5&gt;

&lt;p&gt;Spesifikasi ini akan terpenuhi jika &lt;code&gt;$left&lt;/code&gt; sama dengan &lt;code&gt;$right&lt;/code&gt;&lt;/p&gt;

&lt;pre class="code"&gt;
class Mox_Util_Specification_Match extends Mox_Util_Specification_Base
{
 private $left;
 
 private $right;
 
 public function __construct($left, $right, $message = 'violating match rule')
 {
  parent::__construct($message);
  $this-&amp;gt;left = $left;
  $this-&amp;gt;right = $right;
 }
 
 public function isSatisfied()
 {
  return $this-&amp;gt;left == $this-&amp;gt;right; 
 }
}
&lt;/pre&gt;

&lt;h5&gt;Min Max Length Specification&lt;/h5&gt;

&lt;p&gt;Spesifikasi ini akan terpenuhi jika &lt;code&gt;strlen($target)&lt;/code&gt; berada dalam rentang &lt;code&gt;$min&lt;/code&gt; dan &lt;code&gt;$max&lt;/code&gt;&lt;/p&gt;

&lt;pre class="code"&gt;
class Mox_Util_Specification_MinMaxLength extends Mox_Util_Specification_Base
{
 private $target;
 private $min;
 private $max;
 
 public function __construct($target, $min, $max, $message = 'violating min max length rule')
 {
  parent::__construct($message);
  $this-&amp;gt;target = (string) $target;
  $this-&amp;gt;min = (int) $min;
  $this-&amp;gt;max = (int) $max;
 }
 
 
 public function isSatisfied()
 {
  $strLen = strlen($this-&amp;gt;target);
  return $strLen &amp;gt;= $this-&amp;gt;min &amp;&amp; $strLen &amp;lt;= $this-&amp;gt;max; 
 }
}
&lt;/pre&gt;

&lt;h5&gt;Required Specification&lt;/h5&gt;

&lt;p&gt;Spesifikasi ini akan terpenuhi jika &lt;code&gt;$candidate&lt;/code&gt; tidak kosong&lt;/p&gt;

&lt;pre class="code"&gt;
class Mox_Util_Specification_Required extends Mox_Util_Specification_Base
{
 private $candidate;
 
 public function __construct($candidate, $message = 'violating required rule')
 {
  parent::__construct($message);
  $this-&amp;gt;candidate = (string) $candidate;   
 }
 
 public function isSatisfied()
 {
  return strlen($this-&amp;gt;candidate) &amp;gt; 0; 
 }
}
&lt;/pre&gt;

&lt;p&gt;Contoh Terpenuhi&lt;/p&gt;

&lt;pre class="code"&gt;
$bahasaku = 'sunda';

$spec = new Mox_Util_Specification_Composite();
$spec-&amp;gt;addSpecification(new Mox_Util_Specification_Required($bahasaku, 'Bahasaku harus diisi'));
$spec-&amp;gt;addSpecification(new Mox_Util_Specification_Domain($bahasaku, array('sunda', 'indonesia', 'inggris'), 'Pilihan bahasa salah');
$spec-&amp;gt;addSpecification(new Mox_Util_Specification_MinMaxLength($bahasaku, 4, 10, 'Bahasa harus berkisar 4 sampai 10 karakter'));
$spec-&amp;gt;addSpecification(new Mox_Util_Specification_Match($bahasaku, 'sunda', 'Bahasa harus sunda'));

if ($spec-&amp;gt;isSatisfied()) {
 echo 'Spesifikasi terpenuhi semua';
}else{
 echo $spec-&amp;gt;getMessage();
}
&lt;/pre&gt;

&lt;p&gt;Hasilnya&lt;/p&gt;

&lt;pre class="code"&gt;
Spesifikasi terpenuhi semua
&lt;/pre&gt;

&lt;p&gt;Contoh Tidak Terpenuhi&lt;/p&gt;

&lt;pre class="code"&gt;
$bahasaku = 'jerman';

$spec = new Mox_Util_Specification_Composite();
$spec-&amp;gt;addSpecification(new Mox_Util_Specification_Required($bahasaku, 'Bahasaku harus diisi'));
$spec-&amp;gt;addSpecification(new Mox_Util_Specification_Domain($bahasaku, array('sunda', 'indonesia', 'inggris'), 'Pilihan bahasa salah');
$spec-&amp;gt;addSpecification(new Mox_Util_Specification_MinMaxLength($bahasaku, 4, 10, 'Bahasa harus berkisar 4 sampai 10 karakter'));
$spec-&amp;gt;addSpecification(new Mox_Util_Specification_Match($bahasaku, 'sunda', 'Bahasa harus sunda'));

if ($spec-&amp;gt;isSatisfied()) {
 echo 'Spesifikasi terpenuhi semua';
}else{
 echo $spec-&amp;gt;getMessage();
}
&lt;/pre&gt;

&lt;p&gt;Hasilnya&lt;/p&gt;

&lt;pre class="code"&gt;
Pilihan bahasa salah
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6668187747812565658-5232959468805083224?l=codeq.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeq.blogspot.com/feeds/5232959468805083224/comments/default' title='Poskan Komentar'/><link rel='replies' type='text/html' href='http://codeq.blogspot.com/2009/12/specification-pattern-untuk-validasi.html#comment-form' title='0 Komentar'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6668187747812565658/posts/default/5232959468805083224'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6668187747812565658/posts/default/5232959468805083224'/><link rel='alternate' type='text/html' href='http://codeq.blogspot.com/2009/12/specification-pattern-untuk-validasi.html' title='Specification Pattern untuk Validasi'/><author><name>baabullah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-D-5HxyxGO_U/TcaOSK2C1oI/AAAAAAAAAiw/p8i7h44o_TU/s220/laughing_baby.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6668187747812565658.post-4164051013713093799</id><published>2009-12-12T13:04:00.002+07:00</published><updated>2009-12-12T13:04:28.862+07:00</updated><title type='text'>Implementasi NullIterator di PHP</title><content type='html'>&lt;blockquote&gt;
A NullIterator is a degenerate iterator that's helpful for handling boundary conditions. By definition, a NullIterator is always done with traversal; that is, its IsDone operation always evaluates to true.
&lt;/blockquote&gt;
&lt;blockquote&gt;NullIterator can make traversing tree-structured aggregates (like Composites) easier. At each point in the traversal, we ask the current element for an iterator for its children. Aggregate elements return a concrete iterator as usual. But leaf elements return an instance of NullIterator. That lets us implement traversal over the entire structure in a uniform way.
&lt;/blockquote&gt;

&lt;pre class="code"&gt;
class Mox_Util_NullIterator implements Iterator, Countable 
{
 function __construct(){}
 
 function rewind(){}
 
 function next() {}

 function valid()
 {
  return false;
 }

 function key()
 { 
  return null;
 }

 function current()
 { 
  return null;
 }

 function count()
 {
  return 0;
 }
}
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6668187747812565658-4164051013713093799?l=codeq.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeq.blogspot.com/feeds/4164051013713093799/comments/default' title='Poskan Komentar'/><link rel='replies' type='text/html' href='http://codeq.blogspot.com/2009/12/implementasi-nulliterator-di-php.html#comment-form' title='0 Komentar'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6668187747812565658/posts/default/4164051013713093799'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6668187747812565658/posts/default/4164051013713093799'/><link rel='alternate' type='text/html' href='http://codeq.blogspot.com/2009/12/implementasi-nulliterator-di-php.html' title='Implementasi NullIterator di PHP'/><author><name>baabullah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-D-5HxyxGO_U/TcaOSK2C1oI/AAAAAAAAAiw/p8i7h44o_TU/s220/laughing_baby.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6668187747812565658.post-5688353424580244278</id><published>2009-12-12T12:55:00.002+07:00</published><updated>2009-12-12T12:57:12.635+07:00</updated><title type='text'>Trik Global Konfigurasi di PHP</title><content type='html'>Trik Global Konfigurasi di PHP

&lt;p&gt;Siapkan sebuah kelas untuk menampung global object&lt;/p&gt;
&lt;pre class="code"&gt;
class Mox_Util_Registry
{
 private static $instance;
 
 private $registry;
 
 private function __construct()
 {
  $this-&amp;gt;registry = array();
 }
 
 /**
  * Enter description here...
  *
  * @return Mox_Util_Registry
  */
 public static function getInstance()
 {
  if (self::$instance == null) {
   self::$instance = new self();
  }
  
  return self::$instance;
 }
 
 public function put($key, $value)
 {
  $this-&amp;gt;registry[$key] = $value;
 }
 
 public function get($key)
 {
  if (isset($this-&amp;gt;registry[$key])) {
   return $this-&amp;gt;registry[$key];
  }
  
  return false;
 }
 
 public function removeItem($key)
 {
  unset($this-&amp;gt;registry[$key]);
 }
 
 public function clear()
 {
  $this-&amp;gt;registry = array();
 }
}
&lt;/pre&gt;

&lt;p&gt;Contoh penggunaan:&lt;/p&gt;
&lt;pre class="code"&gt;
Mox_Util_Registry::getInstance()-&amp;gt;put('perpage', 10);
$perpage = Mox_Util_Registry::getInstance()-&amp;gt;get('perpage');
echo 'nilai perpage ' . $perpage;
&lt;/pre&gt;

&lt;p&gt;Hasilnya:&lt;/p&gt;
&lt;pre class="code"&gt;
nilai perpage 10
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6668187747812565658-5688353424580244278?l=codeq.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeq.blogspot.com/feeds/5688353424580244278/comments/default' title='Poskan Komentar'/><link rel='replies' type='text/html' href='http://codeq.blogspot.com/2009/12/trik-global-konfigurasi-di-php.html#comment-form' title='0 Komentar'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6668187747812565658/posts/default/5688353424580244278'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6668187747812565658/posts/default/5688353424580244278'/><link rel='alternate' type='text/html' href='http://codeq.blogspot.com/2009/12/trik-global-konfigurasi-di-php.html' title='Trik Global Konfigurasi di PHP'/><author><name>baabullah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-D-5HxyxGO_U/TcaOSK2C1oI/AAAAAAAAAiw/p8i7h44o_TU/s220/laughing_baby.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6668187747812565658.post-1134523927470588750</id><published>2009-12-12T10:48:00.002+07:00</published><updated>2009-12-12T10:48:34.075+07:00</updated><title type='text'>Membuat Java Class Library</title><content type='html'>&lt;p&gt;Pada contoh ini akan membuat class library untuk menyederhanakan integrasi Spring di EJB.&lt;/p&gt;

&lt;p&gt;Yang harus disiapkan:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Netbeans 6.5.1 + GlassFish&lt;/li&gt;
&lt;li&gt;spring-framework-2.5.1 with dependencies&lt;/li&gt;
&lt;li&gt;axis_1_4&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Buat project dengan nama &lt;code&gt;app-commons&lt;/code&gt;&lt;/p&gt;
&lt;pre class="code"&gt;
File &amp;gt; New Project &amp;gt; Java &amp;gt; Java Class Library
&lt;/pre&gt;

&lt;p&gt;Pada Libraries, Add JAR/Folder.. berikut:&lt;/p&gt;
&lt;pre class="code"&gt;
spring.jar
ejb-api.jar
&lt;/pre&gt;

&lt;p&gt;Buat package dengan nama &lt;code&gt;com.niskala.commons.ejb&lt;/code&gt;&lt;/p&gt;
&lt;pre class="code"&gt;
New &amp;gt; Java Package..
&lt;/pre&gt;

&lt;p&gt;Buat class dengan nama &lt;code&gt;BaseStatelessSessionBean&lt;/code&gt; di package &lt;code&gt;com.niskala.commons.ejb&lt;/code&gt; sbb:&lt;/p&gt;
&lt;pre class="code"&gt;
package com.niskala.commons.ejb;

import javax.ejb.CreateException;
import javax.ejb.SessionContext;
import org.springframework.context.access.ContextSingletonBeanFactoryLocator;
import org.springframework.ejb.support.AbstractStatelessSessionBean;

/**
 *
 * @author Fridayana Baabullah
 */
public class BaseStatelessSessionBean extends AbstractStatelessSessionBean {

    public static final String PRIMARY_CONTEXT_ID = &amp;quot;businessBeanFactory&amp;quot;;

    @Override
    protected void onEjbCreate() throws CreateException {
    }

    @Override
    public void setSessionContext(SessionContext sessionContext) {
        super.setSessionContext(sessionContext);
        setBeanFactoryLocator(ContextSingletonBeanFactoryLocator.getInstance());
        setBeanFactoryLocatorKey(PRIMARY_CONTEXT_ID);
    }
}
&lt;/pre&gt;

&lt;p&gt;Lakukan Clean and Build pada project &lt;code&gt;app-commons&lt;/code&gt; ini untuk menghasilkan sebuah jar bernama &lt;code&gt;app-commons.jar&lt;/code&gt; yang berada di folder &lt;code&gt;dist&lt;/code&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6668187747812565658-1134523927470588750?l=codeq.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeq.blogspot.com/feeds/1134523927470588750/comments/default' title='Poskan Komentar'/><link rel='replies' type='text/html' href='http://codeq.blogspot.com/2009/12/membuat-java-class-library.html#comment-form' title='0 Komentar'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6668187747812565658/posts/default/1134523927470588750'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6668187747812565658/posts/default/1134523927470588750'/><link rel='alternate' type='text/html' href='http://codeq.blogspot.com/2009/12/membuat-java-class-library.html' title='Membuat Java Class Library'/><author><name>baabullah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-D-5HxyxGO_U/TcaOSK2C1oI/AAAAAAAAAiw/p8i7h44o_TU/s220/laughing_baby.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6668187747812565658.post-968455621417418564</id><published>2009-12-12T10:31:00.006+07:00</published><updated>2009-12-12T10:40:58.934+07:00</updated><title type='text'>Membuat Class Java dari WSDL</title><content type='html'>&lt;p&gt;Pada contoh ini kita akan menggenerate java class dari sebuah WSDL.&lt;/p&gt;
&lt;p&gt;Masuk direktori tmp di sistem Anda.&lt;/p&gt;&lt;pre class="code"&gt;cd c:\windows\temp
&lt;/pre&gt;
&lt;p&gt;Buat direktori &lt;code&gt;hasil&lt;/code&gt;&lt;/p&gt;&lt;pre class="code"&gt;mkdir hasil
&lt;/pre&gt;
&lt;p&gt;Generate java class dari WSDL ke folder &lt;code&gt;hasil&lt;/code&gt;&lt;/p&gt;&lt;pre class="code"&gt;wsimport -d hasil http://localhost:4016/EchoService/Echo?wsdl
&lt;/pre&gt;
&lt;p&gt;Buatkan jar nya&lt;/p&gt;&lt;pre class="code"&gt;jar cvf echo-service.jar -C hasil\. .
&lt;/pre&gt;
&lt;p&gt;Maka di &lt;code&gt;c:\windows\temp&lt;/code&gt; akan dihasilkan sebuah jar bernama &lt;code&gt;echo-service.jar&lt;/code&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6668187747812565658-968455621417418564?l=codeq.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeq.blogspot.com/feeds/968455621417418564/comments/default' title='Poskan Komentar'/><link rel='replies' type='text/html' href='http://codeq.blogspot.com/2009/12/membuat-class-java-dari-wsdl.html#comment-form' title='1 Komentar'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6668187747812565658/posts/default/968455621417418564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6668187747812565658/posts/default/968455621417418564'/><link rel='alternate' type='text/html' href='http://codeq.blogspot.com/2009/12/membuat-class-java-dari-wsdl.html' title='Membuat Class Java dari WSDL'/><author><name>baabullah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-D-5HxyxGO_U/TcaOSK2C1oI/AAAAAAAAAiw/p8i7h44o_TU/s220/laughing_baby.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6668187747812565658.post-3901763375010942572</id><published>2009-12-12T10:27:00.002+07:00</published><updated>2009-12-12T10:56:44.372+07:00</updated><title type='text'>Membuat Web Service Client berupa Spring Web MVC dengan Axis</title><content type='html'>&lt;p&gt;Pada contoh ini akan dibuat client Web Service menggunakan Spring Web MVC dan Axis&lt;/p&gt;
&lt;p&gt;Buat project baru dengan nama &lt;code&gt;echo-client&lt;/code&gt;. Jika ditanyakan, pilih Server: &lt;code&gt;GlassFish V2&lt;/code&gt;, Java EE Version: &lt;code&gt;Java EE 5&lt;/code&gt;, Context-Path: &lt;code&gt;/echo-client&lt;/code&gt;. Tidak usah pilih frameworks apapun.&lt;/p&gt;&lt;pre class="code"&gt;File &amp;gt; New Project &amp;gt; Java Web &amp;gt; Web Application
&lt;/pre&gt;
&lt;p&gt;Pada Libraries, Add JAR/Folder.. berikut:&lt;/p&gt;&lt;pre class="code"&gt;spring.jar
spring-webmvc.jar
commons-collections.jar
commons-lang.jar
commons-logging.jar
commons-discovery.jar
velocity-1.5.jar
velocity-tools-view-1.4.jar
activation.jar
axis.jar
jaxrpc.jar
wsdl4j-1.5.1.jar
echo-service.jar
&lt;/pre&gt;
&lt;p&gt;Modifikasi &lt;code&gt;WEB-INF\web.xml&lt;/code&gt; menjadi seperti berikut:&lt;/p&gt;&lt;pre class="code"&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;
&amp;lt;web-app version=&amp;quot;2.5&amp;quot; xmlns=&amp;quot;http://java.sun.com/xml/ns/javaee&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; xsi:schemaLocation=&amp;quot;http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd&amp;quot;&amp;gt;
    &amp;lt;session-config&amp;gt;
        &amp;lt;session-timeout&amp;gt;30&amp;lt;/session-timeout&amp;gt;
    &amp;lt;/session-config&amp;gt;
    &amp;lt;servlet&amp;gt;
        &amp;lt;servlet-name&amp;gt;echo&amp;lt;/servlet-name&amp;gt;
        &amp;lt;servlet-class&amp;gt;org.springframework.web.servlet.DispatcherServlet&amp;lt;/servlet-class&amp;gt;
        &amp;lt;load-on-startup&amp;gt;1&amp;lt;/load-on-startup&amp;gt;
    &amp;lt;/servlet&amp;gt;
    &amp;lt;servlet-mapping&amp;gt;
        &amp;lt;servlet-name&amp;gt;echo&amp;lt;/servlet-name&amp;gt;
        &amp;lt;url-pattern&amp;gt;*.htm&amp;lt;/url-pattern&amp;gt;
    &amp;lt;/servlet-mapping&amp;gt;
    &amp;lt;welcome-file-list&amp;gt;
        &amp;lt;welcome-file&amp;gt;index.jsp&amp;lt;/welcome-file&amp;gt;
    &amp;lt;/welcome-file-list&amp;gt;
&amp;lt;/web-app&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Buat sebuah package dengan nama &lt;code&gt;com.niskala.echo.web&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Buat folder &lt;code&gt;velocity&lt;/code&gt; dibawah &lt;code&gt;WEB-INF&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Buat file kosong (Empty File) bernama &lt;code&gt;velocity.properties&lt;/code&gt; dibawah &lt;code&gt;WEB-INF&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Buat file kosong (Empty File) bernama &lt;code&gt;web.properties&lt;/code&gt; dibawah &lt;code&gt;WEB-INF&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Buat file xml bernama &lt;code&gt;echo-servlet.xml&lt;/code&gt; dibawah &lt;code&gt;WEB-INF&lt;/code&gt; sebagai berikut:&lt;/p&gt;&lt;pre class="code"&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;
&amp;lt;!--
    Document   : echo-servlet.xml
    Created on : December 12, 2009, 6:11 AM
    Author     : Fridayana Baabullah
    Description:
        Purpose of the document follows.
--&amp;gt;
&amp;lt;beans xmlns=&amp;quot;http://www.springframework.org/schema/beans&amp;quot;
xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;
xmlns:p=&amp;quot;http://www.springframework.org/schema/p&amp;quot;
xmlns:context=&amp;quot;http://www.springframework.org/schema/context&amp;quot;
xmlns:jee=&amp;quot;http://www.springframework.org/schema/jee&amp;quot;
xsi:schemaLocation=&amp;quot;
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/jee
http://www.springframework.org/schema/jee/spring-jee-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd&amp;quot;&amp;gt;
    &amp;lt;context:component-scan base-package=&amp;quot;com.niskala.echo.web&amp;quot; /&amp;gt;
 
    &amp;lt;bean id=&amp;quot;velocityConfig&amp;quot;
  class=&amp;quot;org.springframework.web.servlet.view.velocity.VelocityConfigurer&amp;quot;&amp;gt;
        &amp;lt;property name=&amp;quot;resourceLoaderPath&amp;quot; value=&amp;quot;/WEB-INF/velocity/&amp;quot; /&amp;gt;
        &amp;lt;property name=&amp;quot;configLocation&amp;quot; value=&amp;quot;/WEB-INF/velocity.properties&amp;quot;/&amp;gt;
    &amp;lt;/bean&amp;gt;
 
    &amp;lt;bean id=&amp;quot;viewResolver&amp;quot;
  class=&amp;quot;org.springframework.web.servlet.view.velocity.VelocityViewResolver&amp;quot;&amp;gt;
        &amp;lt;property name=&amp;quot;cache&amp;quot; value=&amp;quot;true&amp;quot; /&amp;gt;
        &amp;lt;property name=&amp;quot;prefix&amp;quot; value=&amp;quot;&amp;quot; /&amp;gt;
        &amp;lt;property name=&amp;quot;suffix&amp;quot; value=&amp;quot;.htm&amp;quot; /&amp;gt;
    &amp;lt;/bean&amp;gt;

 &amp;lt;bean id=&amp;quot;propertyConfigurer&amp;quot; class=&amp;quot;org.springframework.beans.factory.config.PropertyPlaceholderConfigurer&amp;quot;&amp;gt;
  &amp;lt;property name=&amp;quot;location&amp;quot;&amp;gt;&amp;lt;value&amp;gt;/WEB-INF/web.properties&amp;lt;/value&amp;gt;&amp;lt;/property&amp;gt;
 &amp;lt;/bean&amp;gt;

 &amp;lt;bean id=&amp;quot;jaxRpcProxy&amp;quot; class=&amp;quot;org.springframework.remoting.jaxrpc.JaxRpcPortProxyFactoryBean&amp;quot;&amp;gt;
  &amp;lt;property name=&amp;quot;serviceFactoryClass&amp;quot;&amp;gt;
   &amp;lt;value&amp;gt;org.apache.axis.client.ServiceFactory&amp;lt;/value&amp;gt;
  &amp;lt;/property&amp;gt;
  &amp;lt;property name=&amp;quot;wsdlDocumentUrl&amp;quot;&amp;gt;
   &amp;lt;value&amp;gt;http://localhost:4016/EchoService/Echo?wsdl&amp;lt;/value&amp;gt;
  &amp;lt;/property&amp;gt;
  &amp;lt;property name=&amp;quot;namespaceUri&amp;quot;&amp;gt;
   &amp;lt;value&amp;gt;http://ws.echo.niskala.com/&amp;lt;/value&amp;gt;
  &amp;lt;/property&amp;gt;
  &amp;lt;property name=&amp;quot;serviceName&amp;quot;&amp;gt;
   &amp;lt;value&amp;gt;EchoService&amp;lt;/value&amp;gt;
  &amp;lt;/property&amp;gt;
  &amp;lt;property name=&amp;quot;portName&amp;quot;&amp;gt;
   &amp;lt;value&amp;gt;EchoPort&amp;lt;/value&amp;gt;
  &amp;lt;/property&amp;gt;
  &amp;lt;property name=&amp;quot;serviceInterface&amp;quot;&amp;gt;
   &amp;lt;value&amp;gt;com.niskala.echo.ws.Echo&amp;lt;/value&amp;gt;
  &amp;lt;/property&amp;gt;
  
  &amp;lt;property name=&amp;quot;servicePostProcessors&amp;quot;&amp;gt;
   &amp;lt;list&amp;gt;
    &amp;lt;bean class=&amp;quot;org.springframework.remoting.jaxrpc.support.AxisBeanMappingServicePostProcessor&amp;quot;&amp;gt;
     &amp;lt;property name=&amp;quot;encodingStyleUri&amp;quot; value=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;/&amp;gt;
     &amp;lt;property name=&amp;quot;typeNamespaceUri&amp;quot; value=&amp;quot;urn:Echo&amp;quot;/&amp;gt;
     &amp;lt;property name=&amp;quot;beanClasses&amp;quot;&amp;gt;
      &amp;lt;list&amp;gt;
       &amp;lt;value&amp;gt;java.lang.String&amp;lt;/value&amp;gt;
      &amp;lt;/list&amp;gt;
     &amp;lt;/property&amp;gt;
    &amp;lt;/bean&amp;gt;
   &amp;lt;/list&amp;gt;
  &amp;lt;/property&amp;gt;
 &amp;lt;/bean&amp;gt;
&amp;lt;/beans&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Buat sebuah velocity template bernama &lt;code&gt;echo.htm&lt;/code&gt; di &lt;code&gt;WEB-INF\velocity\&lt;/code&gt; sbb:&lt;/p&gt;&lt;pre class="code"&gt;&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;title&amp;gt;Web Service Client&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
Anda mengirim $reply
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Buat sebuah controller bernama &lt;code&gt;EchoClientController&lt;/code&gt; di package &lt;code&gt;com.niskala.echo.web&lt;/code&gt; sbb:&lt;/p&gt;&lt;pre class="code"&gt;package com.niskala.echo.web;

import com.niskala.echo.ws.Echo;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

@Controller
@RequestMapping(&amp;quot;/expose&amp;quot;)
public class EchoClientController {

    private Echo echoService;

    @Autowired
    public void setService(Echo echoService) {
        this.echoService = echoService;
    }

    @RequestMapping(method=RequestMethod.GET)
    public ModelAndView index(HttpServletRequest request, HttpServletResponse response) throws Exception {
        ModelAndView mv = new ModelAndView(&amp;quot;echo&amp;quot;);
        String reply = this.echoService.echo(&amp;quot;hadiah&amp;quot;);

        mv.addObject(&amp;quot;reply&amp;quot;, reply);

        return mv;
    }
}
&lt;/pre&gt;
&lt;p&gt;deploy lah project ini&lt;/p&gt;&lt;p&gt;Buka client melalui browser dengan alamat &lt;code&gt;http://localhost:4016/echo-client/expose.htm&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Seharusnya mucul:&lt;/p&gt;&lt;pre class="code"&gt;Anda mengirim hadiah
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6668187747812565658-3901763375010942572?l=codeq.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeq.blogspot.com/feeds/3901763375010942572/comments/default' title='Poskan Komentar'/><link rel='replies' type='text/html' href='http://codeq.blogspot.com/2009/12/membuat-web-service-client-berupa.html#comment-form' title='1 Komentar'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6668187747812565658/posts/default/3901763375010942572'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6668187747812565658/posts/default/3901763375010942572'/><link rel='alternate' type='text/html' href='http://codeq.blogspot.com/2009/12/membuat-web-service-client-berupa.html' title='Membuat Web Service Client berupa Spring Web MVC dengan Axis'/><author><name>baabullah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-D-5HxyxGO_U/TcaOSK2C1oI/AAAAAAAAAiw/p8i7h44o_TU/s220/laughing_baby.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6668187747812565658.post-5001601314881300970</id><published>2009-12-12T10:15:00.002+07:00</published><updated>2009-12-12T10:37:46.162+07:00</updated><title type='text'>Membuat Web Service dari EJB dengan Spring</title><content type='html'>&lt;p&gt;Pada contoh ini akan dibuat sebuah Web Service yang dibangun dari EJB. EJB itu sendiri mendelegasikan tanggung-jawabnya kepada sebuah POJO yang diinject melalui Spring&lt;/p&gt;
&lt;p&gt;Buat project baru dengan nama &lt;code&gt;echo-module&lt;/code&gt;. Jika ditanyakan, pilih server: &lt;code&gt;GlassFish V2&lt;/code&gt; dan Java EE Version: &lt;code&gt;Java EE 5&lt;/code&gt;&lt;/p&gt;
&lt;pre class="code"&gt;File &amp;gt; New Project &amp;gt; Java EE &amp;gt; EJB Module
&lt;/pre&gt;
&lt;p&gt;Buat package dengan nama &lt;code&gt;com.niskala.echo.biz&lt;/code&gt;&lt;/p&gt;
&lt;pre class="code"&gt;New &amp;gt; Java Package..
&lt;/pre&gt;
&lt;p&gt;Buat sebuah interface dengan nama &lt;code&gt;EchoService&lt;/code&gt; di package &lt;code&gt;com.niskala.echo.biz&lt;/code&gt; sbb:&lt;/p&gt;
&lt;pre class="code"&gt;package com.niskala.echo.biz;

/**
 *
 * @author Fridayana Baabullah
 */
public interface EchoService {
    public String echo(String input);
}
&lt;/pre&gt;
&lt;p&gt;Buat sebuah class implementasi dari interface &lt;code&gt;EchoService&lt;/code&gt; dengan nama &lt;code&gt;EchoServiceImpl&lt;/code&gt; di package &lt;code&gt;com.niskala.echo.biz&lt;/code&gt; sbb:&lt;/p&gt;
&lt;pre class="code"&gt;package com.niskala.echo.biz;

/**
 *
 * @author Fridayana Baabullah
 */
public class EchoServiceImpl implements EchoService {
    public String echo(String input) {
        return input;
    }
}
&lt;/pre&gt;
&lt;p&gt;Pada Libraries, Add JAR/Folder.. berikut:&lt;/p&gt;
&lt;pre class="code"&gt;app-commons.jar
spring.jar
commons-logging.jar
&lt;/pre&gt;
&lt;p&gt;Buat file &lt;code&gt;beanRefContext.xml&lt;/code&gt; di package &lt;code&gt;&amp;lt;default package&amp;gt;&lt;/code&gt; sbb:&lt;/p&gt;
&lt;pre class="code"&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;
&amp;lt;beans xmlns=&amp;quot;http://www.springframework.org/schema/beans&amp;quot;
xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;
xsi:schemaLocation=&amp;quot;http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd&amp;quot;&amp;gt;
    &amp;lt;bean id=&amp;quot;businessBeanFactory&amp;quot; class=&amp;quot;org.springframework.context.support.ClassPathXmlApplicationContext&amp;quot;&amp;gt;
        &amp;lt;constructor-arg value=&amp;quot;applicationContext.xml&amp;quot; /&amp;gt;
    &amp;lt;/bean&amp;gt;
&amp;lt;/beans&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Buat file &lt;code&gt;applicationContext.xml&lt;/code&gt; di package &lt;code&gt;&amp;lt;default package&amp;gt;&lt;/code&gt; sbb:&lt;/p&gt;
&lt;pre class="code"&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;
&amp;lt;beans xmlns=&amp;quot;http://www.springframework.org/schema/beans&amp;quot;
xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;
xmlns:context=&amp;quot;http://www.springframework.org/schema/context&amp;quot;  
xmlns:jee=&amp;quot;http://www.springframework.org/schema/jee&amp;quot;
xsi:schemaLocation=&amp;quot;http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd&amp;quot;&amp;gt;

    &amp;lt;context:annotation-config/&amp;gt;    
    
    &amp;lt;bean id=&amp;quot;echoService&amp;quot; class=&amp;quot;com.niskala.echo.biz.EchoServiceImpl&amp;quot;/&amp;gt;

&amp;lt;/beans&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Buat sebuah Local Stateless Session Bean dengan nama &lt;code&gt;Echo&lt;/code&gt; (Netbeans akan secara otomatis menambahkan akhiran Bean sehingga bean kita akan bernama &lt;code&gt;EchoBean&lt;/code&gt;) di package &lt;code&gt;com.niskala.echo.ejb&lt;/code&gt;:&lt;/p&gt;
&lt;pre class="code"&gt;New &amp;gt; Session Bean
&lt;/pre&gt;
&lt;p&gt;Maka Netbeans akan membuka &lt;code&gt;EchoBean&lt;/code&gt; tersebut seperti berikut ini:&lt;/p&gt;
&lt;pre class="code"&gt;package com.niskala.echo.ejb;

import javax.ejb.Stateless;

/**
 *
 * @author Fridayana Baabullah
 */
@Stateless
public class EchoBean implements EchoLocal {
    
    // Add business logic below. (Right-click in editor and choose
    // &amp;quot;Insert Code &amp;gt; Add Business Method&amp;quot; or &amp;quot;Web Service &amp;gt; Add Operation&amp;quot;)
 
}
&lt;/pre&gt;
&lt;p&gt;Tepat di bawah baris '// &amp;quot;Insert Code &amp;gt; Add Business Method&amp;quot; or &amp;quot;Web Service &amp;gt; Add Operation&amp;quot;)', lakukan klik kanan &amp;gt; Insert Code.. &amp;gt; Add Business Method..&lt;/p&gt;
&lt;p&gt;Isi Name dengan &lt;code&gt;echo&lt;/code&gt;, Return Type dengan &lt;code&gt;java.lang.String&lt;/code&gt;, lalu Add sebuah parameter dengan Name = &lt;code&gt;input&lt;/code&gt;, Type = &lt;code&gt;java.lang.String&lt;/code&gt;, Final = Tidak dicentang. Ok&lt;/p&gt;
&lt;p&gt;Maka secara otomatis Netbeans akan menambahkan code berikut:&lt;/p&gt;
&lt;pre class="code"&gt;public String echo(String input) {
 return null;
}
&lt;/pre&gt;
&lt;p&gt;Modifikasi &lt;code&gt;EchoBean&lt;/code&gt; tersebut menjadi seperti berikut:&lt;/p&gt;
&lt;pre class="code"&gt;package com.niskala.echo.ejb;

import com.niskala.commons.ejb.BaseStatelessSessionBean;
import com.niskala.echo.biz.EchoService;
import javax.ejb.Stateless;
import javax.interceptor.Interceptors;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ejb.interceptor.SpringBeanAutowiringInterceptor;

/**
 *
 * @author Fridayana Baabullah
 */
@Stateless
@Interceptors(SpringBeanAutowiringInterceptor.class)
public class EchoBean extends BaseStatelessSessionBean implements EchoLocal {

    private EchoService echoService;

    @Autowired
    public void setEchoService(EchoService echoService) {
        this.echoService = echoService;
    }
    public String echo(String name) {
        return echoService.echo(name);
    }
    
    // Add business logic below. (Right-click in editor and choose
    // &amp;quot;Insert Code &amp;gt; Add Business Method&amp;quot; or &amp;quot;Web Service &amp;gt; Add Operation&amp;quot;)
 
}
&lt;/pre&gt;
&lt;p&gt;Kemudian kita akan mengexpose SessionBean ini menjadi sebuah Web Service&lt;/p&gt;
&lt;p&gt;Buat Web Service baru&lt;/p&gt;
&lt;pre class="code"&gt;New &amp;gt; Web Service..
&lt;/pre&gt;
&lt;p&gt;Isi Web Service Name dengan &lt;code&gt;Echo&lt;/code&gt;, Package dengan &lt;code&gt;com.niskala.echo.ws&lt;/code&gt;, Pilih pada &lt;code&gt;Create Web Service from Existing Session Bean&lt;/code&gt;. Klik pada tombol Browse lalu pilih &lt;code&gt;echo-module&lt;/code&gt; &amp;gt; &lt;code&gt;Enterprise Beans&lt;/code&gt; &amp;gt; &lt;code&gt;Echo Bean&lt;/code&gt;. Ok, Finish.&lt;/p&gt;
&lt;p&gt;Maka secara otomatis Netbeans akan membuat package &lt;code&gt;com.niskala.echo.ws&lt;/code&gt; yang berisi sebuah class bernama &lt;code&gt;Echo&lt;/code&gt; yang isinya sebagai berikut:&lt;/p&gt;
&lt;pre class="code"&gt;package com.niskala.echo.ws;

import com.niskala.echo.ejb.EchoLocal;
import javax.ejb.EJB;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.ejb.Stateless;

/**
 *
 * @author Fridayana Baabullah
 */
@WebService()
@Stateless()
public class Echo {
    @EJB
    private EchoLocal ejbRef;
    // Add business logic below. (Right-click in editor and choose
    // &amp;quot;Web Service &amp;gt; Add Operation&amp;quot;

    @WebMethod(operationName = &amp;quot;echo&amp;quot;)
    public String echo(@WebParam(name = &amp;quot;input&amp;quot;)
    String input) {
        return ejbRef.echo(input);
    }

}
&lt;/pre&gt;
&lt;p&gt;Deploy lah project &lt;code&gt;echo-module&lt;/code&gt; ini.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6668187747812565658-5001601314881300970?l=codeq.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeq.blogspot.com/feeds/5001601314881300970/comments/default' title='Poskan Komentar'/><link rel='replies' type='text/html' href='http://codeq.blogspot.com/2009/12/membuat-web-service-dari-ejb-dengan.html#comment-form' title='1 Komentar'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6668187747812565658/posts/default/5001601314881300970'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6668187747812565658/posts/default/5001601314881300970'/><link rel='alternate' type='text/html' href='http://codeq.blogspot.com/2009/12/membuat-web-service-dari-ejb-dengan.html' title='Membuat Web Service dari EJB dengan Spring'/><author><name>baabullah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-D-5HxyxGO_U/TcaOSK2C1oI/AAAAAAAAAiw/p8i7h44o_TU/s220/laughing_baby.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6668187747812565658.post-3917627890455704260</id><published>2009-08-22T21:17:00.002+07:00</published><updated>2009-12-12T09:54:37.886+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Velocity'/><category scheme='http://www.blogger.com/atom/ns#' term='Spring'/><title type='text'>Setup Spring ViewResolver Menggunakan Velocity</title><content type='html'>&lt;p&gt;Berikut adalah contoh setup Spring viewResolver menggunakan teknologi Velocity&lt;/p&gt;&lt;pre class="code"&gt;&amp;lt;bean id=&amp;quot;viewResolver&amp;quot; class=&amp;quot;org.springframework.web.servlet.view.velocity.VelocityLayoutViewResolver&amp;quot;&amp;gt; 
 &amp;lt;property name=&amp;quot;cache&amp;quot; value=&amp;quot;true&amp;quot; /&amp;gt; 
 &amp;lt;property name=&amp;quot;prefix&amp;quot; value=&amp;quot;&amp;quot; /&amp;gt; 
 &amp;lt;property name=&amp;quot;suffix&amp;quot; value=&amp;quot;.html&amp;quot; /&amp;gt; 
 &amp;lt;property name=&amp;quot;exposeSpringMacroHelpers&amp;quot; value=&amp;quot;true&amp;quot; /&amp;gt;
 &amp;lt;property name=&amp;quot;viewClass&amp;quot; value=&amp;quot;org.springframework.web.servlet.view.velocity.VelocityLayoutView&amp;quot; /&amp;gt;
 &amp;lt;property name=&amp;quot;layoutUrl&amp;quot; value=&amp;quot;layout/MainLayout.html&amp;quot; /&amp;gt;
 &amp;lt;property name=&amp;quot;toolboxConfigLocation&amp;quot; value=&amp;quot;/WEB-INF/tools.xml&amp;quot; /&amp;gt;
&amp;lt;/bean&amp;gt;
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6668187747812565658-3917627890455704260?l=codeq.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeq.blogspot.com/feeds/3917627890455704260/comments/default' title='Poskan Komentar'/><link rel='replies' type='text/html' href='http://codeq.blogspot.com/2009/08/setup-spring-viewresolver-menggunakan.html#comment-form' title='0 Komentar'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6668187747812565658/posts/default/3917627890455704260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6668187747812565658/posts/default/3917627890455704260'/><link rel='alternate' type='text/html' href='http://codeq.blogspot.com/2009/08/setup-spring-viewresolver-menggunakan.html' title='Setup Spring ViewResolver Menggunakan Velocity'/><author><name>baabullah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-D-5HxyxGO_U/TcaOSK2C1oI/AAAAAAAAAiw/p8i7h44o_TU/s220/laughing_baby.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6668187747812565658.post-1417859322745212648</id><published>2009-08-22T05:52:00.001+07:00</published><updated>2009-08-23T05:55:01.872+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Debugging'/><title type='text'>Tuntas Debugging Javascript Menggunakan Firebug</title><content type='html'>&lt;img src="http://eprofile.web.id/static/files/firebug-debug.gif" alt="Firebug Javascript Debugging"/&gt;

&lt;p&gt;Firebug adalah plugin browser Mozilla Firefox. Firebug dapat digunakan untuk melakukan debugging javascript. Fitur yang ditawarkan sudah mumpuni diantaranya:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Breakpoints&lt;/li&gt;
&lt;li&gt;Watch&lt;/li&gt;
&lt;li&gt;Debug control (Continue, Step Over, Step Into, Step Out) plus shortcut keyboardnya&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Kunjungi homepage Firebug: &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/1843"&gt;https://addons.mozilla.org/en-US/firefox/addon/1843&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6668187747812565658-1417859322745212648?l=codeq.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeq.blogspot.com/feeds/1417859322745212648/comments/default' title='Poskan Komentar'/><link rel='replies' type='text/html' href='http://codeq.blogspot.com/2009/08/tuntas-debugging-javascript-menggunakan.html#comment-form' title='0 Komentar'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6668187747812565658/posts/default/1417859322745212648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6668187747812565658/posts/default/1417859322745212648'/><link rel='alternate' type='text/html' href='http://codeq.blogspot.com/2009/08/tuntas-debugging-javascript-menggunakan.html' title='Tuntas Debugging Javascript Menggunakan Firebug'/><author><name>baabullah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-D-5HxyxGO_U/TcaOSK2C1oI/AAAAAAAAAiw/p8i7h44o_TU/s220/laughing_baby.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6668187747812565658.post-3672262241738236617</id><published>2009-08-22T04:55:00.001+07:00</published><updated>2009-12-12T09:51:00.124+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Velocity'/><category scheme='http://www.blogger.com/atom/ns#' term='Spring'/><title type='text'>Mengatur Apache Velocity Logging pada Spring Framework</title><content type='html'>&lt;p&gt;Untuk mematikan logging velocity pada spring dapat dilakukan dengan mengatur property &lt;code&gt;overrideLogging&lt;/code&gt; pada bean &lt;code&gt;VelocityConfigurer&lt;/code&gt; menjadi &lt;code&gt;false&lt;/code&gt;. Lalu nilai &lt;code&gt;runtime.log.logsystem.class&lt;/code&gt; pada file &lt;code&gt;velocity.properties&lt;/code&gt; diisi dengan &lt;code&gt;org.apache.velocity.runtime.log.NullLogChute&lt;/code&gt;.&lt;/p&gt;&lt;br /&gt;
&lt;pre class="code"&gt;&amp;lt;bean id=&amp;quot;velocityConfig&amp;quot;
 class=&amp;quot;org.springframework.web.servlet.view.velocity.VelocityConfigurer&amp;quot;&amp;gt;
 &amp;lt;property name=&amp;quot;resourceLoaderPath&amp;quot;
  value=&amp;quot;/WEB-INF/templates&amp;quot; /&amp;gt;
 
 &amp;lt;property name=&amp;quot;configLocation&amp;quot;&amp;gt;
  &amp;lt;value&amp;gt;/WEB-INF/classes/velocity.properties&amp;lt;/value&amp;gt;
 &amp;lt;/property&amp;gt;
 
 &amp;lt;property name=&amp;quot;overrideLogging&amp;quot;&amp;gt;
  &amp;lt;value&amp;gt;false&amp;lt;/value&amp;gt;
 &amp;lt;/property&amp;gt;
&amp;lt;/bean&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
&lt;pre class="code"&gt;runtime.log.logsystem.class = org.apache.velocity.runtime.log.NullLogChute
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6668187747812565658-3672262241738236617?l=codeq.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeq.blogspot.com/feeds/3672262241738236617/comments/default' title='Poskan Komentar'/><link rel='replies' type='text/html' href='http://codeq.blogspot.com/2009/08/mengatur-apache-velocity-logging-pada.html#comment-form' title='0 Komentar'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6668187747812565658/posts/default/3672262241738236617'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6668187747812565658/posts/default/3672262241738236617'/><link rel='alternate' type='text/html' href='http://codeq.blogspot.com/2009/08/mengatur-apache-velocity-logging-pada.html' title='Mengatur Apache Velocity Logging pada Spring Framework'/><author><name>baabullah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-D-5HxyxGO_U/TcaOSK2C1oI/AAAAAAAAAiw/p8i7h44o_TU/s220/laughing_baby.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6668187747812565658.post-2153737824681242100</id><published>2009-08-21T21:39:00.001+07:00</published><updated>2009-12-12T09:46:29.130+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>LiveQuery, Plugin jQuery untuk Binding Event Tingkat Mahir</title><content type='html'>&lt;p&gt;Penggunaan jQuery untuk memanipulasi DOM sangat powerfull. Semua hal terkait DOM jadi serba mudah. Binding event malah lebih menakjubkan lagi, tapi sebatas pada element yang sudah ready. Untuk element yang diciptakan kemudian, jQuery native tidak dapat secara otomatis melakukan binding event.&lt;/p&gt;&lt;p&gt;LiveQuery lahir untuk mengangani masalah tersebut. Plugin jQuery ini dapat melakukan binding event pada element manapun, baik yang sudah ready maupun element yang datang kemudian.&lt;/p&gt;&lt;pre class="code"&gt;# Binding event click terhadap element P 
$('p').livequery('click', function (){ alert('clicked'); });  
# Menambahkan element P baru di container 
$('&amp;lt;p&amp;gt;ditambahkan kemudian&amp;lt;/p&amp;gt;').appendTo('#container');
&lt;/pre&gt;&lt;p&gt;Kunjungi LiveQuery homepage: &lt;a href="http://docs.jquery.com/Plugins/livequery"&gt;http://docs.jquery.com/Plugins/livequery&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6668187747812565658-2153737824681242100?l=codeq.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeq.blogspot.com/feeds/2153737824681242100/comments/default' title='Poskan Komentar'/><link rel='replies' type='text/html' href='http://codeq.blogspot.com/2009/08/livequery-plugin-jquery-untuk-binding.html#comment-form' title='0 Komentar'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6668187747812565658/posts/default/2153737824681242100'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6668187747812565658/posts/default/2153737824681242100'/><link rel='alternate' type='text/html' href='http://codeq.blogspot.com/2009/08/livequery-plugin-jquery-untuk-binding.html' title='LiveQuery, Plugin jQuery untuk Binding Event Tingkat Mahir'/><author><name>baabullah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-D-5HxyxGO_U/TcaOSK2C1oI/AAAAAAAAAiw/p8i7h44o_TU/s220/laughing_baby.jpg'/></author><thr:total>0</thr:total></entry></feed>
