Apa itu Custom Tag ? Custom Tag atau biasa dikenal juga dengan sebutan Custom Action merupakan suatu tag yang kita definisikan sendiri. Lalu apa itu Tag ? Saya yakin kalian pasti sudah pernah menggunakan tag. Yang paling sering digunakan adalah tag <jsp:include></jsp:include>. Dalam tag tersebut, “jsp” dikenal dengan istilah prefix, sedangkan “include” merupakan nama dari tag itu sendiri. Jadi kita akan menjalankan tag include yang berada di prefix jsp.

Nah untuk membuat suatu Custom Tag, kita harus membuat suatu Tag Library Descriptor (TLD) dan Tag Handler. Tag Library Descriptor (TLD) dibuat dalam format XML TLD berfungsi untuk mendefiniskan suatu tag sehingga dapat dibaca oleh JSP container. Sedangkan Tag Handler merupakan suatu class yang mengimplementasi tugas dari tag tersebut. Tag handler hanyalah sebuah class biasa yang meng-extends class SimpleTagSupport.

Daripada bingung baca teori, mending sekarang langsung ke contoh deh. Jadi saya akan membuat suatu tag <maniakJava:cekGanjilGenap> dengan attribute angka.
Seperti biasa, karena saya terbiasa menggunakan IDE Netbeans, maka dalam contoh kali ini juga akan menggunakan Netbeans untuk memudahkan kita dalam ngoding.😀


Langsung saja buat new project. Lalu klik kanan di node project kalian, lalu pilih New -> Other -> Web -> Tag Library Descriptor, lalu tekan tombol Next.
Sekarang di step 2, isi TLD Name dengan ManiakJavaDescriptor. Lalu pada bagian prefix isi dengan maniakJava. Sisanya biarkan default saja. Lalu tekan tombol finish.

Sekarang edit file ManiakJavaDescriptor.tld yang sudah terbentuk menjadi seperti ini :

<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.1" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd">

	<tlib-version>1.0</tlib-version>
    <short-name>maniakJava</short-name>
    <uri>/WEB-INF/tlds/ManiakJavaDescriptor</uri>

    <tag>
        <name>cekGanjilGenap</name>
        <tag-class>com.maniakjava.action.GanjilGenapHandler</tag-class>
        <body-content>scriptless</body-content>

        <attribute>
            <name>angka</name>
            <required>true</required>
            <rtexprvalue>true</rtexprvalue>
            <type>int</type>
        </attribute>

    </tag>

</taglib>

Perhatikan konfigurasi di atas, nilai untuk attribute <body-content> terdiri dari 3 pilihan sebagai berikut :
– scriptless. Berarti body dari tag boleh kosong atau boleh diisi dengan teks atau sintaks HTML.
– tagdependet. Body dari tag bisa berisi tag lainnya.
– empty. Body harus dikosongkan.
Yang dimaksud dengan body disini adalah statement yang terletak di antara <maniakJava:cekGanjilGenap angka=”88″> dan </maniakJava:cekGanjilGenap>.

Kemudian pada konfigurasi di atas juga terdapat attribute <rtexprvalue>. Attribute ini berfungsi untuk menentukan apakah nilai attributenya dapat diset dengan menggunakan Expression ( <%=%> ). Nilai defaultnya adalah false.

Sekarang kita akan membuat sebuah Tag Handler. Sama seperti sebelumnya, klik kanan di node project kalian, lalu pilih New  -> Other -> Web -> Tag Handler, lalu tekan tombol Next. Pada step 2, isi class name dengan GanjilGenapHandler, lalu isi package dengan com.maniakjava.action, sisanya biarkan default lalu tekan tombol Next. Sekarang di step 3, uncheck checkbox bertuliskan add corresponding tag. Lalu tekan tombol finish. Sekarang ubah class GanjilGenapHandler menjadi seperti ini :

package com.maniakjava.action;

import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.JspFragment;
import javax.servlet.jsp.tagext.SimpleTagSupport;

public class GanjilGenapHandler extends SimpleTagSupport
{
    private int angka;

    public void setAngka(int angka) {
        this.angka = angka;
    }
    
    private String checkGanjilGenap(int angka)
    {
        String result="";
        if(angka%2==0) result = "Angka genap";
        else result = "Angka ganjil";
     
        return result;
    }

    @Override
    public void doTag() throws JspException 
	{
        JspWriter out = getJspContext().getOut();
        try 
		{            
            out.println(checkGanjilGenap(angka));
            
			out.println("<b>");
            JspFragment f = getJspBody();
            if (f != null) f.invoke(out);
            out.println("</b>");
        } 
		catch (java.io.IOException ex) 
		{
            throw new JspException("Error in NewTagHandler tag", ex);
        }
    }

}

Sekarang kita tinggal membuat file jsp nya. Edit file index.jsp yang sudah dibuat secara otomatis oleh Netbeans menjadi seperti ini :

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <form action="tampil.jsp" method="post">
            <table border="1">
                <tr>
                    <td>Masukkan angka : </td>
                    <td><input type="text" name="angka" id="angka"></td>
                </tr>
                <tr>
                    <td colspan="2">
                        <input type="submit">
                    </td>
                </tr>
            </table>
        </form>
    </body>
</html>

Lalu buatlah sebuah file tampil.jsp. Edit codenya menjadi seperti ini :

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<%@taglib prefix="maniakJava" uri="/WEB-INF/tlds/ManiakJavaDescriptor" %>

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <%
            int angka = Integer.parseInt(request.getParameter("angka"));            
        %>
        <maniakJava:cekGanjilGenap angka="<%=angka%>">
            <br/>Ini teks di body tag
        </maniakJava:cekGanjilGenap>
    </body>
</html>

Nah sudah, tinggal dijalankan saja.

Comments
  1. JSPNewbie says:

    kang, tlg dong bikin tutorial cara upload project jsp ke hosting. thx

    • ManiakJava says:

      Sorry baru bales kang..
      saya sendiri belum pernah upload project ke hosting😀
      kalau di kantor saya, uploadnya ke server pribadi yang dibeli sama client atau upload ke server kantor sendiri (client sewa)
      jadi kalau saya hanya tinggal upload filenya aja, terus setting tomcat, sama beli domain jalan deh…😀

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s