วันพุธที่ 28 มกราคม พ.ศ. 2558

Java พื้นฐาน - Variable Types ชนิดของตัวแปร

Java พื้นฐาน - Variable Types ชนิดของตัวแปร


               ตัวแปรใน Java นั้นจะมีชนิดของตัวแปรอยู่ ซึ่งจะบ่งบอกถึงขนาดและขอบเขตที่สามารถใช้ตัวแปรนั้นได้ โดยชนิดของตัวแปรจะมีทั้งหมด 3 ชนิด

1. Local variables - ตัวแปรที่ถูกประกาศใน method, constructor, block

2. Instance variables - ตัวแปรของ object

3. Static variables - ตัวแปรของ Class


เราจะมาดูกันว่าชนิดของตัวแปรที่ประกาศเอาไว้นั้น แต่ละแบบมีความหมายอย่างไร



1. Local variables - ตัวแปรที่ถูกประกาศใน method, constructor หรือ block


               Local variables เป็นตัวแปรที่ถูกประกาศใน method, constructors หรือ blocks โดยจะถูกสร้างขึ้นเมื่อ method, constructors หรือ block ถูกเรียกใช้ และจะถูกทำลายเมื่อสิ้นสุด method, constructors หรือ block โดยตัวแปรแบบ Local นั้นจะถูกมองเห็นเฉพาะขอบเขตที่ถูกประกาศเอาไว้เท่านั้น เช่น ถ้าประกาศตัวแปรเอาไว้ใน method ตัวแปรนั้นก็จะสามารถใช้งานได้ภายใน method นั้นเท่านั้น

               ตัวแปรแบบ Local นั้นจะไม่มีค่า Default ดังนั้นเราจึงควรที่จะใส่ค่าให้กับตัวแปร Local ในตอนที่เราได้ทำการประกาศตัวแปร

ตัวอย่าง การประกาศตัวแปรแบบ Local


- ประกาศตัวแปรแบบ Local ไว้ใน method

public class Test {
 
 public static void main(String[] args) {

 }
 
 // Method ที่ทำการประกาศตัวแปร
 public static void declareVariableInMethod(){
  int i = 0; // ตัวแปรที่ถูกประกาศใน method
  System.out.println(i);
  // ตัวแปรจะถูกทำลายหลังจากจบ method
 }
 
}



- ประกาศตัวแปรแบบ Local ไว้ใน Constructor

public class Student {
 
 // ประกาศตัวแปร variableInConstructor ไว้ใน Constructor 
 public Student(){
  String variableInConstructor = "test"; // ตัวแปรที่ถูกประกาศไว้ใน Constructor
  
  // เมื้อสิ้นสุด Constructor ตัวแปรจะถูกทำลายไปด้วย
 }
 
}


- ประกาศตัวแปรแบบ Local ไว้ใน Block


   block ใน Java นั้นก็เช่น If Else

public class Test {
 
 public static void main(String[] args) {
  
  // ตัวอย่างการประกาศตัวแปรแบบ Local ใน Block
  if(1 == 1){
   int i = 0; // ตัวแปรที่ถูกประกาศเอาไว้ใน Block
   
   // ตัวแปรจะสิ้นสุดเมื่อจบ block  
  }
 }
 
}





2. Instance variables - ตัวแปรของ object


               ตัวแปรแบบ Instance นั้นจะถูกประกาศเอาไว้ในคลาส แต่จะอยู่ภายนอกของ method, constructor และ block ต่างๆ ซึ่งตัวแปรแบบ Instance นั้นจะถูกสร้างขึ้นก็ต่อเมื่อมีการสร้าง Object ขึ้นมา
การเรียกใช้ตัวแปรแบบ Instance นั้นสามารถเรียกใช้ภายใน method, constructor หรือใน block ได้

               เรายังสามารถใส่ Access Modifiers ให้กับตัวแปรแบบ Instance ได้ซึ่งจะทำให้เราสามารถกำหนดระดับการเข้าถึงตัวแปรนั้นๆได้ เช่น กำหนดให้เห็นได้เฉพาะในคลาส หรือจะให้คลาสอื่นสามารถเห็นก็ได้ แต่โดยปกติแล้วตัวแปรแบบ Instance นั้นเราจะกำหนด Access Modifier ให้เป็น private เพื่อที่ตัวแปรนั้นๆจะถูกใช้ได้แค่ภายในคลาสที่ทำการประกาศตัวแปรเอาไว้เท่านั้น

               หากเราไม่กำหนดค่าให้ตัวแปร Instance  ตัวแปร Instance จะมีค่า Default ให้เองโดยอัตโนมัติ
ซึ่งขึ้นอยู่กับชนิดของตัวแปรข้อมูลที่เราได้ทำการประกาศไว้ เช่น ประกาศตัวแปรเอาไว้เป็น int i; ค่า default ของ i จะเท่ากับ 0 โดยอัตโนมัติ


ตัวอย่าง การประกาศตัวแปรแบบ Instance             

  

public class Student {
 
 // ตัวแปรแบบ Instance โดยใช้ Access Modifier เป็น private เพื่อให้ตัวแปรเหล่านี้ถูกเห็นได้แค่ภายในคลาสนี้เท่านั้น
 private String instanceVariable; // ค่า Default ของ String จะเป็นค่า null
 private int i = 2; // เราสามารถทำการกำหนดค่าให้กับตัวแปรได้เลย
 
 // การเรียกใช้ตัวแปรใน Constructor
 public Student(){
  instanceVariable = "Test Instance Variable";
  i = 3;
 }

}




3. Static variables - ตัวแปรของ Class


               ตัวแปรแบบ Static หรือตัวแปรของ Class นั้นจะมีการประกาศคล้ายๆ กับตัวแปรแบบ Instance โดยจะแตกต่างกันที่ ตัวแปรแบบ Static นั้นจะมีการประกาศคำว่า Static เอาไว้ข้างหน้าของตัวแปรเช่น static String testStatic; และข้อแตกต่างอีกอย่างหนึ่งก็คือ ตัวแปรแบบ Static จะเอาไว้ใช้กับคลาสเท่านั้น ซึ่งคลาสจะสามารถมีได้แค่ 1 คลาส ส่วนตัวแปรแบบ Instance นั้นจะเกิดขึ้นก็ต่อเมื่อมีการสร้าง Object ขึ้นมา ซึ่ง Object ต่างๆก็จะเกิดขึ้นมาจากคลาส แต่คลาส 1 คลาสสามารถสร้าง Object ได้ไม่จำกัด โดยที่ตัวแปรแบบ Instance นั้นจะใช้ได้แค่ใน Object เดียว ซึ่งถ้าหากเราทำการสร้าง Object ใหม่อีกเราก็จะได้ตัวแปรอันใหม่สำหรับ Object ที่เราสร้างใหม่ ซึ่งไม่เกี่ยวกับ Object เดิมที่เคยสร้างไว้

               การประกาศตัวแปรแบบ Static นั้นใช้หลักการเดียวกับการประกาศตัวแปรแบบ Instance ได้เลย เพียงแต่เราจะต้องใส่คำว่า static เอาไว้ที่ข้างหน้าของตัวแปรนั้นๆ

               ตัวแปรแบบ Static จะถูกสร้างขึ้นเมื่อโปรแกรมเริ่มทำงาน และจะถูกทำลายเมื่อโปรแกรมสิ้นสุดการทำงาน และเราสามารถกำหนด Access Modifier ได้เช่นเดียวกับ ตัวแปรแบบ Instance แต่ ตัวแปร Static ควรจะใช้ Access Modifier เป็น public เพื่อให้สามารถเรียกใช้ได้จากภายนอก Class

               ค่า Default ของตัวแปรแบบ Static นั้นก็เหมือนกับ ตัวแปรแบบ Instance เลย แต่จะมีพิเศษกว่าก็ตรงที่สามารถกำหนดค่าของตัวแปรภายใน static block ได้ด้วย

               หากเราประกาศโดยใช้ keyword public static final เราจะต้องตั้งชื่อตัวแปรให้เป็นตัวอักษรพิมพ์ใหญ่ให้หมดทุกตัวหากต้องการเว้นวรรคคำควรใช้เครื่องหมาย _ 
เช่น  public static final THIS_IS_STATIC_FINAL_VARIABLE 



ตัวอย่าง การประกาศตัวแปรแบบ Static


               

ตัวอย่างคลาสที่ทำการประกาศตัวแปรแบบ static

// ตัวอย่างคลาสที่ทำการประกาศตัวแปรแบบ static
public class TestStaticVariable {

 private static String privateStatic; // การประกาศตัวแปร static โดยไม่กำหนดค่าให้ โปรแกรมจะทำการใส่ค่า default ให้โดยอัตโนมัติ ซึ่งค่า default ของ String ก็คือค่า null 
 public static String publicStatic; // เราสามารถประกาศคัวแปร static โดยใช้ Access Modifier ได้ซึ่งในที่ี้นี้จะคำว่า public
 
 public static final String STATIC_FINAL_VARIABLE = "test";// การประกาศโดยใช้คำว่า final มาร่วมกับ static เราจะต้องตั้งชื่อตัวแปรให้เป็นตัวพิมพ์ใหญ่ให้หมด และเราจะต้องทำการกำหนดค่าให้ตัวแปรทุกครั้งที่ประกาศ เพราะเราไม่สามารถใช้ค่า Default ได้
 
}


ตัวอย่างคลาสที่การเรียกใช้งานตัวแปรแบบ static

// ตัวอย่างคลาสที่การเรียกใช้งานตัวแปรแบบ static 
public class CallStaticVariable {

 public static void main(String[] args) {
  // เราจะลองเรียกตัวแปร static หรือตัวแปรของ Class TestStaticVariable
  // วิธีเรียกจะเป็นดังนี้
  //String test = TestStaticVariable.privateStatic; // บรรทัดนี้จะ error เพราะตัวแปร static ของคลาส TestStaticVariable ถูกประกาศการเข้าถึงเป็นแบบ private จะทำให้ไม่สามารถเรียกใช้ตัวแปรนี้ผ่านคลาสอื่นๆได้ 
  String test2 = TestStaticVariable.publicStatic; // ตัวแปร static นี้ถูกประกาศการเข้าถึงเอาไว้เป็นแบบ public ทำให้สามารถเรียกใช้งานตัวแปรนี้ผ่านทางคลาส CallStaticVariable ได้
  String test3 = TestStaticVariable.STATIC_FINAL_VARIABLE; // ตัวอย่างการเรียกใช้ตัวแปร static ที่มีการประกาศเอาไว้แบบ final
 }

}





https://www.facebook.com/coachingcode


อ่านต่อ »

วันศุกร์ที่ 23 มกราคม พ.ศ. 2558

Java Basic Data Type - ชนิดข้อมูลพื้นฐาน (พร้อมวิดีโอ)

Java Basic Data Type - ชนิดข้อมูลพื้นฐาน




               ตัวแปรคือสิ่งที่ใช้หน่วยความจำ(memory) เพื่อใช้ในการเก็บค่า นั่นก็หมายความว่าทุกๆครั้งที่เราทำการสร้างตัวแปรขึ้นมา 1 ตัว จะทำให้เกิดการจองพื้นที่ในหน่วยความจำขึ้นมาทันที โดยจะใช้พื้นที่ไปเท่าไรนั้น ขึ้นอยู่กับชนิดของตัวแปรที่เราได้ทำการประกาศเอาไว้นั่นเอง

ใน Java จะมีชนิดข้อมูลอยู่ 2 ชนิดด้วยกัน
1. Primitive Data Types
2. Reference Data Types


1. Primitive Data Types


               ตัวแปรที่มีการประกาศแบบ Primitive จะเก็บค่าที่ถูกกำหนดเอาไว้ในหน่วยความจำเลย

Java มีชนิดข้อมูลพื้นฐาน (Primitive Data Types) 8 ประเภท


ชนิดข้อมูล ขนาด เก็บค่า ค่าพื้นฐาน ตัวอย่าง ค่าต่ำสุด ค่าสูงสุด
boolean 1 bit true หรือ false false false false true
char 16 bits ตัวอักษร Unicode \u0000 A \u0000 หรือ 0 \uffff หรือ 65,535
byte 8 bits ตัวเลขที่มีค่าเป็น บวก หรือ ลบ 0 -60 หรือ 120  -128 127
short 16 bits ตัวเลขที่มีค่าเป็น บวก หรือ ลบ 0 -15,000 หรือ 32,000 -32,768 32,767
int 32 bits ตัวเลขที่มีค่าเป็น บวก หรือ ลบ 0 -100,000 หรือ 300,000 -2,147,483,648 2,147,483,647
long 64 bits ตัวเลขที่มีค่าเป็น บวก หรือ ลบ 0L -100,000L หรือ 300,000L -9,223,372,036,854,775,808 9,223,372,036,854,775,807
float 32 bits ตัวเลขทศนิยม 0.0f 256.5f ตามมาตรฐาน IEEE 754 ตามมาตรฐาน IEEE 754
double 64 bits ตัวเลขทศนิยม 0.0 345.6 ตามมาตรฐาน IEEE 754 ตามมาตรฐาน IEEE 754

ตัวอย่างการประกาศตัวแปร เช่น
boolean b = true;
- char c = 'A';
- byte bt = 10;
- short s = 20;
- int i = 30;
- long l = 40L;
- float f = 0.5f;
- double d = 345.4;
สังเกตได้ว่าการประกาศตัวแปรที่เป็นแบบ Primitive Data Type เราจะใช้ตัวอักษรพิมพ์เล็กหมดเลย


2. Reference Data Types


               ตัวแปร Reference เป็นตัวแปรที่ใช้เข้าถึง Object โดยจะเก็บค่าที่เป็นที่อยู่ของ Object นั้นๆเอาไว้ ไม่ได้เก็บค่าของ object โดยตรง ซึ่งแตกต่างจากตัวแปรแบบ Primitive ซึ่ง Primitive จะทำการเก็บค่าที่ถูกกำหนดเอาไว้ในหน่วยความจำได้เลย  
               ตัวแปร Reference จะมีค่าพื้นฐานเป็นค่า null โดยที่ตัวแปร reference จะสามารถอ้างถึง object ใดๆก็ได้ตาม Type ของตัวแปรที่ถูกประกาศไว้
ตัวอย่างการประกาศตัวแปรแบบ reference เช่น
- String str = "Hello World";
- Student student = new Student();




Java Literals


               Literal ก็คือ ค่าต่างๆที่เรากำหนดเอาไว้ในตัวแปร source code ที่เราเขียนเอาไว้โดยจะนำค่านั้นไปใช้ได้โดยตรงเลยโดยที่ไม่ต้องผ่านการประมวลผล
เช่น
- char d = 'D';
- byte b = 60;

ตัวแปรที่เป็นชนิด byte, short, int, long เราสามรถที่จะกำหนดค่าโดยจะใช้เป็น เลขฐานสิบ(decimal) เลขฐานแปด(octal) หรือเลขฐานสิบหก(hexadecimal) ได้ เช่น
- int decimal = 12; // เมื่อนำค่าไปแสดงจะได้ 12
- int octal = 0123; // เมื่อนำค่าไปแสดงจะได้  83
- int hexa = 0x80; // เมื่อนำค่าไปแสดงจะได้  128


String literals
จะเป็นข้อความต่างๆ โดยเราจะใส้ข้อความเอาไว้ภายใน ""(double quotes) เช่น

- String hello = "Hello world";
- char c = 'A';

เราสามารถประกาศค่าที่เป็น unicode ลงในตัวแปร String และ char ได้เลย ตามนี้ครับ

- String unicodeString = "\u0E01"; // เมื่อนำไปแสดงผลจะได้ตัวอักษร ก
- char unicodeChar =  "\u0E01"; // เมื่อนำไปแสดงผลจะได้ตัวอักษร ก

Java ยังสนับสนุนการใช้ อักขระพิเศษมาใช้ร่วมกับ String และ char ได้อีกด้วย

NotationCharacter represented
\nNewline (0x0a) ขึ้นบรรทัดใหม่
\rCarriage return (0x0d) ขึ้นบรรทัดใหม่
\fFormfeed (0x0c)
\bBackspace (0x08)
\sSpace (0x20)
\ttab
\"Double quote
\'Single quote
\\backslash
\dddOctal character (ddd) เลขฐานแปด
\uxxxxHexadecimal UNICODE character (xxxx)







https://www.facebook.com/coachingcode


อ่านต่อ »

สอนติดตั้งโปรแกรมเพื่อใช้งาน Java บน Eclipse (พร้อมวิดีโอ)

สอนติดตั้งโปรแกรมเพื่อใช้งาน Java บน Eclipse

โปรแกรมที่ต้องลงก่อนเพื่อที่จะใช้งาน Java

1. JDK version 1.6.0_45  หรือจะโหลด version อื่นๆก็ได้นะครับแต่ขอให้เป็น version 6
2. โปรแกรม Eclipse เอาไว้เขียน Java นะครับ








https://www.facebook.com/coachingcode


อ่านต่อ »

สอน Java พื้นฐานอย่างง่าย - พื้นฐานไวยากรณ์ (Basic Syntax)

พื้นฐานไวยากรณ์ (Basic Syntax)

               ก่อนอื่นเรามารู้จักคำที่ใช้บ่อยในการเขียน JAVA กันก่อน ซึ่งคำที่จะอธิบายทั้งหมดนี้จะอธิบายเพื่อให้เข้าใจเกี่ยวกับคำเหล่านี้  เพื่อที่จะใช้ในการอ้างอิงในหากพบเจอในส่วนของบทอื่นๆ
  
Object - Object จะมี State และ Behaviors
               State หรือ สถานะ ก็จะคือพวกตัวแปรต่างๆที่เอาไว้เก็บค่า 
               Behaviors หรือ พฤติกรรมหรือการปฏิบัติ ก็คือ method ที่เปรียบเสมือนการแสดงพฤติกรรมต่างๆ หรือการทำงานต่างๆ

ตัวอย่างเช่น Dog จะมี State คือ name, breed(สายพันธุ์) ที่คอยระบุลักษณะของ Object(วัตถุ) นั้นๆ
ส่วน Behavior หรือพฤติกรรมของ Dog นั้นคือ เห่า, กิน, นอน  ฯลฯ

Class - Class ก็คือแบบแปลนหรือพิมพ์เขียว ที่ใช้อธิบาย State(สถานะ) และ Behavior(พฤติกรรม) ของ Object(วัตถุ)

Method - ก็คือ โดยทั่วไป method ก็คือ Behavior หรือ พฤติกรรม

Instance Variables - คือตัวแปรของ Object


Basic syntax - ไวยากรณ์พื้นฐานที่ควรรู้


Case Sensitivity - ก็คือถึงแม้ว่าจะเป็นตัวอักษรเดียวกัน แต่ต่างกันแค่ตัวพิมพ์เล็ก  ตัวพิมพ์ใหญ่  Java ก็จะถือว่าเป็นคนละตัวกัน เช่น  Hello กับ hello

Class Names - ชื่อคลาสควรขึ้นต้นด้วยตัว พิมพ์ใหญ่ เช่น   MyClass  โดยที่คำที่ต่อมาที่เป็นคำใหม่ก็ต้องขึ้นต้นด้วยตัวพิมพ์ใหญ่

Program File Name - ชื่อของไฟล์ Java ควรจะเหมือนกับชื่อของ Class

public static void main(String args[]) - Java จะเริ่มทำงานที่ main method

Java Identifiers - การตั้งชื่อคลาส, ตัวแปร, method เราจะเรียกว่า Identifier


ในการเขียน Java นั้นจะมีหลักของการตั้งชื่อพวกคลาส ตัวแปร method ที่เราควรจะรู้เอาไว้ เช่น
- ต้องตั้งชื่อเริ่มต้นด้วยตัว A-Z หรือ a-z หรือ $ หรือ _
- คำที่เป็น keyword หรือ reserved word จะไม่สามารถนำมาตั้งชือ่ได้
- การตั้งชื่อแม้เพียงอักษรตัวพิมพ์เล็กกับตัวพิมพ์ใหญ่ ก็ถือว่ามีความแตกต่างกัน เช่น A กับ a





https://www.facebook.com/coachingcode


อ่านต่อ »

วันอาทิตย์ที่ 18 มกราคม พ.ศ. 2558

JSF 2 - Managed Beans

Managed Beans คือ อะไร



               Managed Beans ก็คือ java bean ที่ JSF จะนำมาใช้เป็นคลาสกลางที่เอาไว้เชื่อมต่อกับหน้าเว็บ
ซึ่งค่าจากตัวแปรใน Managed Beans ที่นำมาใช้กับหน้าเว็บ ก็คือ properties หรือตัวแปรที่ประกาศเอาไว้ในคลาส โดยจะต้องมี getter และ setter method เพื่อให้สามารถเรียกใช้ตัวแปรเหล่านี้ผ่านทางหน้าเว็บได้

               ใน JSF 2 นี้ก่อนที่เราจะใช้งาน Managed Beans ได้เราจะต้องทำการตั้งค่าก่อน
โดยวิธีการที่เราจะทำได้นั้นมี 2 วิธี
1. ตั้งค่าผ่าน XML
2. ตั้งค่าโดยใช้ Annotation

ตัวอย่างการตั้งค่า



1. ตั้งค่าผ่าน XML

การตั้งค่าผ่าน XML นี้เราจะต้องไปตั้งค่าที่ไฟล์ที่ชื่อว่า faces-config.xml โดยตั้งค่าดังนี้
<managed-bean>
  <managed-bean-name>helloWorld</managed-bean-name>
  <managed-bean-class>com.learning.jsf2.HelloWorld</managed-bean-class>
  <managed-bean-scope>request</managed-bean-scope>
</managed-bean> 
<managed-bean-name>helloWorld</managed-bean-name>  บรรทัดนี้จะบอกว่าชื่อที่เราใช้อ้างอิงคลาสเพื่อเรียกใช้จากหน้าเว็บของเราจะใช้ชื่ออะไร ซึ่งเราไม่จำเป็นต้องตั้งให้เหมือนชื่อคลาสก็ได้  แต่เราควรจะตั้งให้เหมือนชื่อคลาสโดยใช้อักษรตัวแรกเป็นตัวพิมพ์เล็ก เพื่อให้ง่ายต่อการใช้งานในการค้นหา
<managed-bean-class>com.learning.jsf2.HelloWorld</managed-bean-class> บรรทัดนี้เอาไว้บอกที่อยู่ของคลาส Managed Bean ซึ่งจะประกาศแบบเต็มๆโดยขึ้นต้นด้วยชื่อ package ก่อนแล้วตามด้วยชื่อคลาส
<managed-bean-scope>request</managed-bean-scope>  บรรทัดนี้จะบอก scope ของ Managed Bean 


ซึ่งมีทั้งหมด 5 Scope ดังนี้ครับ

1. Application Scope - มีการประกาศ Scope ดังนี้ครับ 

<managed-bean-scope>application</managed-bean-scope>

managed bean ที่ทำการประกาศ Scope แบบ Application จะถูกสร้างครั้งแรกเมื่อมี HTTP request เข้ามาเกี่ยวกับ bean นั้นๆ และจะถูกทำลายเมื่อมีการ shut down Web Application


2. Session Scopeมีการประกาศ Scope ดังนี้ครับ 

<managed-bean-scope>session</managed-bean-scope>

managed bean ที่ประกาศ Scope แบบ Session จะถูกสร้างขึ้นครั้งแรกเมื่อมี HTTP request ที่เกี่ยวข้องกับ bean นั้นๆใน Session และจะถูกทำลายเมื่อ session หมดเวลา หรือ session ถูกทำลาย หรือ session ไม่ถูกต้อง

3. Request Scope - มีการประกาศ Scope ดังนี้ครับ 

<managed-bean-scope>request</managed-bean-scope>

managed bean ที่ประกาศ Scope แบบ Request จะถูกสร้างขึ้นครั้งแรกเมื่อมี HTTP request ที่เกี่ยวข้องกับ bean นั้นๆ และจะถูกทำลายเมื่อ HTTP response ของ HTTP request ที่สร้าง bean นั้นๆ สิ้นสุดลง


4. View Scope - มีการประกาศ Scope ดังนี้ครับ 

<managed-bean-scope>view</managed-bean-scope>

managed bean ที่ประกาศ Scope แบบ View จะถูกสร้างขึ้นครั้งแรกเมื่อมี HTTP request ที่เกี่ยวข้องกับ bean นั้นๆ ซึ่งจะมีชีวิตอยู่ภายใน JSF ที่เป็น View เดียวกัน และจะถูกทำลายเมื่อเราใช้งาน View อื่นๆ


5. None Scope - มีการประกาศ Scope ดังนี้ครับ 

<managed-bean-scope>none</managed-bean-scope>

managed bean ที่ประกาศ Scope แบบ None จะถูกสร้างขึ้นครั้งแรกเมื่อมีการเรียกใช้ EL Expression เช่น #{helloBean.message} และจะถูกทำลายเมื่อการประมวลผล EL Expression สิ้นสุดลง




2. การตั้งค่าโดยการใช้ Annotation


เราสามารถประกาศ Scope ของ Managed Bean แบบ Annotation ได้โดยการประกาศ
@ชื่อScope ประกาศไว้ที่หัวของ Class เช่น

@SessionScoped
public class testSessionScoped {

}


ซึ่งการประกาศแบบ Annotation นี้จะมีวิธีการประกาศอยู่ 6 วิธีด้วยกัน

1. @ApplicationScoped
2. @SessionScoped
3. @RequestScoped
4. @ViewScoped
5. @NoneScoped
6. @CustomScoped

โดยการประกาศ 5 แบบแรกนั้นก็เหมือนที่ผมอธิบายเรื่องการประกาศแบบ xml เลยครับ
แต่จะมีแตกต่างที่ข้อ 6 ที่เป็น @CustomScoped ซึ่ง Bean ที่ประกาศโดยใช้ Scope แบบ Custom นี้จะมีชีวิตขึ้นอยู่กับ Custom map ที่เราได้ทำการ set เอาไว้



อ่านต่อ »

วันเสาร์ที่ 17 มกราคม พ.ศ. 2558

สร้าง Application แรกด้วย JSF 2

สร้าง Application แรกด้วย JSF 2

ฝาก code ไว้ใน Blog



download jstl


code ที่ใช้ในวิดีโอ นะครับ


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
   <title>JSF Tutorial!</title>
</head>
<body>
test
<br/>
   #{helloWorld.message}
</body>
</html>




https://www.facebook.com/coachingcode


อ่านต่อ »

วันพุธที่ 14 มกราคม พ.ศ. 2558

สอน Java พื้นฐานอย่างง่าย - Java Virtual Machine (JVM)

Java Virtual Machine (JVM)


Java virtual machine คืออะไร


               Java virtual machine หรือ JVM ก็คือโปรแกรมคอมพิวเตอร์ที่ประมวลโปรแกรมได้เสมือนเป็นเครื่องจริงๆ ซึ่งตัว JVM นี้จะถูกเขียนขึ้นมาอย่างแตกต่างๆ สำหรับแต่ละแพลตฟอร์ม เช่น Window, UNIX, หรือ Mac OS  เพื่อให้รองรับการรันภาษา Java ได้ทุกๆแพลตฟอร์ม

Java Virtual Machine

               โปรแกรม Java จะถูกคอมไพล์โดย Java คอมไพเลอร์ ให้อยู่ในรูปแบบ bytecode ซึ่ง JVM จะทำการแปล bytecode และจะทำการประมวลผลโปรแกรม Java

               โปรแกรม Java จะถูกแปลงจากภาษาระดับสูงไปเป็นคำสั่งของ JVM ตั้งแต่ตอนคอมไพล์โปรแกรม  ดังนั้นตอนทำงานจึงเพียงแค่แปลจากคำสั่งของ JVM ไปเป็นคำสั่งที่หน่วยประมวลผลนั้นๆทำงานได้ซึ่งเรียกว่า native code
ซึ่งแต่ละแพลตฟอร์มก็จะมี native code ที่ไม่เหมือนกัน แต่เราไม่จำเป็นจะต้องเข้าใจ native code เหล่านี้ เพราะทางผู้พัฒนาภาษา Java เขาทำตัวแปลงให้เราเอาไว้เรียบร้อยแล้ว




https://www.facebook.com/coachingcode


อ่านต่อ »

สอน Java พื้นฐานอย่างง่าย - Compilation and Interpretation

Compilation and Interpretation


               ภาษาระดับสูง (high level language) เช่น C, C++, Java ถูกสร้างขึ้นมาเพื่อให้สามารถเขียนโปรแกรมได้ง่าย ทำให้เราไม่ต้องเข้าใจโครงสร้าง และชุดคำสั่งของหน่วยประมวลผลมากนัก ก็สามารถเขียนโปรแกรมได้

               อย่างไรก็ตามหน่วยประมวลผลทั่วไปไม่สามารถทำงานกับโปรแกรมภาษาระดับสูงได้โดยตรงจึงต้องมีตัวแปลภาษาที่เปลี่ยนโปรแกรมต้นฉบับที่เราเขียนขึ้นมา (source code) ที่เขียนด้วยภาษาระดับสูง ให้เป็นชุดคำสั่งที่หน่วยประมวลผลสามารถเข้าใจได้ (executable code) 
โดยมีวิธีแปลอยู่ 2 แบบ คือ

1. Interpretation ซึ่งเราจะเรียกตัวแปลภาษาแบบนี้ว่า Interpreter(อินเตอร์พรีเตอร์) ซึ่งทำการแปลง source code ให้เป็น executable code ทีละบรรทัดและทำงาน  จากนั้นก็จะทำแบบเดิมไล่ลงไปทีละบรรทัด  ซึ่งแบบนี้จะอธิบายง่ายๆว่า แปลไปประมวลผลไป

2. Compilation ซึ่งเราจะเรียกตัวแปลภาษาแบบนี้ว่า Compiler(คอมไพเลอร์) จะทำการวิเคราะห์ source code ก่อน แล้วจะได้ executable code เพื่อนำมาประมวลผลต่อไป ซึ่งแบบนี้จะอธิบายง่ายๆว่า แปลให้เสร็จทั้งหมดก่อน แล้วค่อยนำมาประมวลผล


ภาพด้านล่างจะบอกกระบวนการของการนำ code JAVA ที่เราเขียนไปใช้งานนะครับ






https://www.facebook.com/coachingcode


อ่านต่อ »

สอน Java พื้นฐานอย่างง่าย - Overview

สอน Java พื้นฐานอย่างง่าย

Java Technology


               ในบทความนี้ผมจะอธิบายคร่าวๆเกี่ยวกับ Java ซึ่งอยากให้ผู้อ่านเข้าใจภาพรวมอย่างคร่าวๆ เพื่อใช้ในการศึกษา  ซึ่งผมคิดว่าการศึกษาแต่เพียงนิยาม อาจจะทำให้มองไม่เห็นภาพเท่าไร  แต่ผมคาดว่าทุกๆท่านจะเข้าใจมากขึ้นเมือได้ลองดูการเขียน code พร้อมกับการสอดแทรกเนื้อหาเข้าไปด้วย  ซึ่งผมจะทำการอธิบายพร้อมการเขียนโปรแกรมไปพร้อมๆกันด้วยในบทต่อๆไป

มาเริ่มกันเลยครับ


               Java technology นั้นเป็นทั้งภาษาเขียนโปรแกรมและแพลตฟอร์ม

               ภาษา Java ถูกออกแบบมาเพื่อการพัฒนา Application บนความแตกต่างกันทางระบบปฏิบัติการที่ต่างแพลตฟอร์มกัน  ซึ่งเราสามารถเขียนครั้งเดียวและสามารถใช้ได้บนทุกแพลตฟอร์มไม่ว่าจะเป็น Window, UNIX, หรือ Mac OS

               ภาษา Java นั้นมีต้นกำเนิดมาจากส่วนหนึ่งของโครงการวิจัยเพื่อพัฒนาซอฟท์แวร์สำหรับอุปกรณ์ network ที่หลากหลายและ embedded systems  โดยมีเป้าหมายในการพัฒนาขนาดเล็ก  มีความน่าเชื่อถือ  เคลื่อนย้ายง่าย  สามารถแจกจ่ายได้ และเป็นเป็นแพลตฟอร์มที่ทำงานแบบ real-time

               ภาษา Java ประสบความสำเร็จในเรื่องการโปรแกรมเชิงวัตถุเป็นอย่างมาก เนื่องจากกลไกของภาษาเชิงวัตถุจะทำการซ่อนความยุ่งยากต่างๆเอาไว้ในคลาส เพื่อให้ผู้ที่เขียนโปรแกรมไม่จำเป็นต้องทรายรายละเอียดเหล่านี้  ด้วยเหตุนี้เองจึงทำให้การโปรแกรมเชิงวัตถุเป็นที่นิยมอย่างมาก  และประโยชน์ของการโปรแกรมเชิงวัตถุก็คือ ใช้เวลาน้อยในการเขียน

               อีกข้อได้เปรียบของภาษา Java ก็คือ มีชุดการทำงานของคลาสต่างๆ (เรียกว่า library) เป็นจำนวนมากมาให้เราใช้งานโดยที่ไม่ต้องเสียค่าใช้จ่ายใดๆ อีกทั้ง Java ยังถูกออกแบบมาเพื่อความปลอดภัยโดยไม่ยอมให้มีการอ้างอิง Address ของตัวแปรโดยการใช้ Pointer รวมทั้งยังมีกลไกจัดการหน่วยความจำที่ไม่ได้ใช้ เพื่อให้นำกลับมาใช้ใหม่ได้ โดยที่ไม่ต้องทำการคืนหน่วยความจำเหมือนภาษาอื่นๆ เช่น ภาษา C

               Java ยังมีความน่าสนใจในเรื่องการจัดการกับข้อผิดพลาด หรือที่เรียกว่า Exception Handling ซึ่งกลไกนี้จะช่วยให้โปรแกรมสามารถทำงานต่อไปได้หากเกิด error


ทีนี้มาดูจุดเด่นของ Java เป็นเรื่องๆกันครับ


Object Oriented - Java นั้นมีกลไกการเขียนโปรแกรมเชิงวัตถุ

Platform independent - ไม่ขึ้นกับ Platform ใดๆ คือสามารถเขียนครั้งเดียว รันได้ทุกที่

Simple - Java ถูกออกแบบมาเพื่อให้ง่ายต่อการเรียนรู้

Secure - Java มีฟังก์ชันเกี่ยวกับความปลอดภัยให้ใช้งาน เช่นการเข้ารหัส

Architectural-neutral - Java คอมไพเลอร์จะทำการสร้าง architecture-neutral object file format ที่จะทำให้ code ที่ถูกคอมไพล์สามารถประมวลผลได้บนเครื่องใดก็ได้ที่มี Java virtual machine

Portable - เนื่อจากความที่เป็น Architectural-neutral ทำให้เราสามารถนำ code ที่เราเขียนเอาไว้ไปรันบนเครื่องไหนๆก็ได้ที่มี Java virtual machine

Robust - มีความแข็งแกร่ง เนื่องจาก Java จะเน้นการตรวจสอบ error ในช่วง compile time และ runtime

Multithreaded - เราสามารถที่จะเขียน Java ให้รันพร้อมๆกันได้ในเวลาเดียวกัน

Interpreted - Java byte code จะถูกแปลงให้เป็น ภาษา native ที่ทำให้เครื่องที่ทำการรันเข้าใจ

High Performance - ด้วย Just-In-Time compilers ทำให้ Java มีประสิทธิภาพที่สูง

Distributed - Java ถูกออกแบบมาเพื่อให้สามารถแบ่งปันบน Internet ได้


สิ่งที่อธิบายทั้งหมดนี้เป็นเพียงการแนะนำให้รู้จัก JAVA เบื้องต้นพอคร่าวๆนะครับ
อยากจะให้ทุกท่านรู้เอาไว้เพื่อทราบ ไม่จำเป็นต้องรู้เพื่อจำนะครับ  เพราะถ้าเราคลุกคลีอยู่กับการเขียนโปรแกรม เดี๋ยวสิ่งต่างๆเหล่านี้มันก็จะเกิดขึ้นมาให้เราเห็นในระหว่างที่เราเขียนเองครับ



https://www.facebook.com/coachingcode


อ่านต่อ »

วันพุธที่ 7 มกราคม พ.ศ. 2558

JSF Life Cycle (วัฏจักรชีวิตของ JSF)

JSF Life Cycle (วัฏจักรชีวิตของ JSF)

               ต้องขอเกริ่นนำเอาไว้ก่อนเลยว่าการอธิบายสิ่งเหล่านี้อาจจะไม่ทำให้มองเห็นภาพซักเท่าไร แต่จะเป็นการให้ข้อมูลเอาไว้ก่อน  ซึ่งผมจะอธิบายส่วนเหล่านี้เอาไว้ในบทถัดๆไป พร้อมกับการเขียน code ซึ่งจะทำให้เราเข้าใจในส่วนนี้มากขึ้น

JSF application life cycle ประกอบด้วย 6 ส่วน

1. Restore view phase
2. Apply request values phase
3. Process validations phase
4. Update model value phase
5. Invoke application phase
6. render response phase



Phase 1 : Restore view

               JSF จะเริ่ม Restore View Phase ในทันทีที่มีการกด link หรือ button
จากนั้น JSF จะรับ request  ซึ่งใน Phase นี้ JSF จะทำการสร้าง view ซึ่งจะผูกตัวจัดการ event (event handler) และ validators กับ UI Components และทำการ save ลงใน view ซึ่งอยู่ใน FaceContext instance

Phase 2 : Apply request values

               หลังจากที่ component tree ถูกสร้างหรือถูกเก็บใน view   component tree แต่ละตัวจะทำการแปลงค่าเพื่อเก็บเป็น request parameter
               ถ้าหากเกิด error ในการแปลงค่า จะมี error message ที่ถูกสร้างโดยอัตโนมัติเก็บไว้ใน FacesContext ในรูปแบบ queue ซึ่ง error message เหล่านี้จะถูกแสดงผลใน render response phase

Phase 3 : Process validation

               ใน phase นี้  จะเป็น phase ที่ทำการตรวจสอบข้อมูลจากตัว validator ถ้าการ validate ผิดจะทำมี error message ออกมาและจะทำการกระโดดข้ามไปที่ render reponse phase ทันที

Phase 4 : Update model values

               หลังจากที่ JSF ได้ทำการตรวจสอบข้อมูลใน phase validation เรียบร้อยแล้ว JSF จะทำการ update ค่าต่างๆลงที่ bean properties ซึ่งก็คือ field ของ java bean ที่ผูกกับ input component

Phase 5 : Invoke application

               ใน phase นี้ JSF จะจัดการ event ในทุกๆ application-level  เช่น การกด submit form หรือการ link ไปที่หน้าอื่นๆ

Phase 6 : Render response

               ใน phase นี้ JSF จะทำการแสดงผลหน้าเพจ   หลังจากที่ข้อมูลต่างๆถูกแสดงผลแล้ว จะมีการเก็บ reponse state เอาไว้เพื่อใช้ใน request ครั้งต่อๆไป

จบเรื่อง JSF Life Cycle กันแล้วนะครับ ซึ่งผมจะอธิบายส่วนเหล่านี้พร้อมกับการเขียน code ในส่วนต่อๆไปนะครับ  ^ ^




https://www.facebook.com/coachingcode


อ่านต่อ »

การ Set up JSF 2 บน Eclipse อย่างง่าย

การ Set up JSF 2 บน Eclipse

               วันนี้ผมจะมาสอนการติดตั้ง JSF 2 บน Eclipse กันนะครับ  ก่อนอื่นผมจะแสดงรายการโปรแกรมที่ต้องลงก่อนนะครับ



โปรแกรมที่ต้องลงก่อนเพื่อที่จะใช้งาน JSF 2

1. JDK version 1.6.0_45  หรือจะโหลด version อื่นๆก็ได้นะครับแต่ขอให้เป็น version 6 
2. โปรแกรม Eclipse (ผมใช้ Eclipse ตัว Kepler นะครับ) download มาแล้วก็วางตาม drive ที่ต้องการได้   เลยโดยที่ไม่ต้อง install ครับ
3. Apache Tomcat 6 download ตัวที่เป็น Core นะครับ (ซึ่งในบทที่ผมจะสอน ผมจะใช้ tomcat เป็น server นะครับ) โหลดเสร็จแล้วให้แตกไฟล์วางที่ไหนก็ได้ครับ โดยที่ไม่ต้อง install

วิธีการติดตั้ง

1. ลง JDK ให้เสร็จเรียบร้อยก่อน 
2. วางไฟล์ Eclipse ไว้ที่ drive ไหนก็ได้ที่ต้องการ
2. วางไฟล์ tomcat  ไว้ที่ drive ไหนก็ได้ที่ต้องการ

ทีนี้มาลองเปิด Eclipse กันนะครับ 
ผมจะตั้งชื่อ workspace ว่า E:\learn_jsf_2 นะครับ หากไม่เคยสร้างโฟลเดอร์ที่ชื่อ learn_jsf_2 ตัว Eclipse จะทำการสร้างให้โดยอัตโนมัตินะครับ

ติดตั้ง JSF 2 บน Eclipse

1. คลิกที่ File > New > Other...

2. เลือก Dynamic Web Project แล้วกด Next

3. Project name (ชื่อโปรเจคจะใส่อะไรก็ได้) : ผมจะใส่เป็น EASY_JSF_2 นะครับ

4. จากนั้นกดที่ปุ่ม New Runtime... ที่อยู่ตรงหัวข้อ Target runtime ครับ

5. จากนั้นให้เลือก Apache Tomcat v6.0 แล้วกด Next ครับ

6. ตรงส่วน Name เป็นชื่อของ Server ครับ ซึ่งเราจะตั้งใหม่ก็ได้ครับ ผมจะเปลี่ยนเป็น My tomcat 6 นะครับ  
     ในส่วน Tomcat installation directory ให้ใส่ path ที่เราวาง tomcat เอาไว้นะครับ ซึ่งผมได้วางเอาไว้ที่ E:\tomcat\apache-tomcat-6.0.41  จากนั้นกด Finish ครับ

7. ต่อไปให้กดที่ปุ่ม Modify... ตรงหัวข้อ Configuration 

8. ตรง Java ให้เลือกเป็น version 1.6 ครับ แล้วให้ติ๊กถูกที่ JavaServer Faces และให้เลือกเป็น version 2 ด้วยครับ จากนั้นให้กด OK ครับ

9. ต่อไปให้กด Next ครับ

10. กด Next อีกทีครับ

11. แล้วก็กด Next อีกเช่นเคย

12. ทีนี้มันจะบอกเราว่าขาด user library ให้เราคลิกที่ปุ่มตามรูปครับ

13. จากนั้นให้เลือกตามที่ผมเลือกแล้วกด Next ครับ

14. ต่อมาให้ติ๊กถูกที่  I accept the terms of this license. แล้วกด Finish ครับ ซึ่งหลังจากที่เรากด Finish แล้ว Eclipse จะทำการโหลดไฟล์ Library ซักครู่นึงครับถ้าอินเตอร์เน็ตของเราแรงหน่อย

15. พอเสร็จแล้วก็จะได้หน้าตาแบบนี้ครับ  แล้วก็กดปุ่ม Finish ได้เลยครับ

16. ทีนี้เราก็จะได้ Project ที่มีลักษณะหน้าตาเป็นแบบนี้ครับ

17. ต่อมาก็ให้เลือก Window > Show View > Other...

18. เลือก Servers แล้วกด OK ครับ

19. ให้คลิกที่ No servers are available. Click this link to create a new server ครับ

20. จากนั้นให้กด Next ครับ


21. จากนั้นให้คลิกที่ Project ที่อยู่ได้ซ้ายแล้วกด Add ครับ

22. จากนั้นให้กด Finish ครับ


23. จากนั้นให้เรา double-click ที่ Server อีกที แล้วจะได้หน้าต่างดังรูปจากนั้นให้ Use Tomcat installation ตามรูปเลยครับ จากนั้นกด Ctrl + S เพื่อ Save


24. ต่อมาให้เข้าที่ Window > Preferences

25. จากนั้นให้เข้าไปที่ Menu ตามรูปเลยครับ แล้วกด Add


26. เลือก Standard VM แล้วกด Next ครับ

27. จากนั้นให้ใส่ที่อยู่ของ JDK เราครับแล้วกด Finish

28. จากนั้นให้เราติ๊กถูกตัวที่เราเพิ่ง Add เข้ามาแล้วกด OK ครับ

29. ต่อมาให้เราเข้าที่ Window > Preference เหมือนเดิมครับ

30. จากนั้นให้ไปที่เมนู Java > Compiler แล้วเปลี่ยน Compiler compliance level ให้เป็น 1.6 ครับ จากนั้นกด OK จากนั้นจะมี Pop-up ขึ้นมาให้เรากด Yes ครับ

31. ทีนี้เรามาแก้ไขไฟล์ web.xml กันครับ โดยเพิ่ม <welcome-file>index.xhtml</welcome-file> ตามรูปเลยครับ


32. ต่อมาเรามาสร้างไฟล์ index.xhtml กันครับ โดยการคลิกขวาที่ WebContent > New > File โดยใส่ชื่อไฟล์ว่า index.xhtml ครับ จากนั้นกด Finish ครับ

33. ทีนี้นำ code เหล่านี้ไปใส่ใน file แล้วกด save ได้เลยครับ

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" 
 xmlns:c="http://java.sun.com/jsf/core"
 xmlns:ui = "http://java.sun.com/jsf/facelets"
 xmlns:h = "http://java.sun.com/jsf/html">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Insert title here</title>
</head>
<h:body>
<h:outputLabel value="Hello World"></h:outputLabel>
</h:body>
</html>

34. จากนั้นกด click ขวาที่ server แล้วเลือก Start ครับ

35. ทีนี้เราลองมาเข้า URL ตามนี้กันครับ  http://localhost:8080/EASY_JSF_2/faces/index.xhtml
เมื่อเราเข้า URL ตามนี้แล้วก็จะได้ผลลัพธ์ดังนี้ครับ



https://www.facebook.com/coachingcode


อ่านต่อ »

JSF Overview

JSF คืออะไร

               JSF (JavaServer Faces) ก็คือ MVC web framework ที่ใช้ Java เป็นตัวขับเคลื่อน ซึ่งมี UI Component ให้ใช้งานมากมาย

JSF มีประโยชน์อย่างไร

1. มี UI Component ที่สามารถนำกลับมาใช้ใหม่ได้
2. มีความง่ายในการส่งข้อมูลระหว่าง UI Components
3. สามารถจัดการ UI State จากหลายๆ Server Request ได้
4. สามารถทำ Components ใช้งานเองได้
5. สนับสนุนการใช้งานทั้งด้าน Client และ Server


               อย่างที่บอกเอาไว้ตอนต้นว่า JSF คือ MVC web framework ซึ่งเราจะมาทำความเข้าใจกันว่า MVC คืออะไร

M - Model       ใช้ในการเก็บข้อมูล
V - View          ใช้เป็นส่วนแสดงผลของ User Interface ซึ่งก็คือหน้าเว็บนั่นเอง
C - Controller  เป็นส่วนที่เอาไว้ควบคุมหรือจัดการข้อมูลต่างๆ

ซึ่งวัตถุประสงค์ของการใช้ MVC design pattern ก็คือ เพื่อแยกส่วนของข้อมูลและส่วนแสดงผลออกจากกัน ทำให้นักพัฒนาสามารถ focus ในการเขียนโค้ดเป็นส่วนๆได้มากขึ้น และ code ดูเป็นระเบียบมากขึ้น
ทำให้นักพัฒนาทำงานได้ง่ายขึ้น เช่น Designer ก็จะ focus ส่วนที่เป็น View ส่วน Developer ก็จะ Focus ในส่วนของ Model และ Controller (ในกรณีที่มีการแบ่งงานกันทำ)



https://www.facebook.com/coachingcode


อ่านต่อ »