[Java] อ่านข้อมูลจาก XML โดยใช้ JDOM Parser

การอ่านข้อมูลจาก xml โดยใช้ Java นั้นมีหลายรูปแบบมากเนื่องจาก Java เองมี XML Parser อยู่หลายตัว สำหรับตัวอย่างนี้จะใช้ JDOM Parser ซึ่งเร็วกว่าตัวอื่น เนื่องจากไม่ไ่ด้ใช้ในการแก้ไขข้อมูล xml แต่เป็นการอ่านข้อมูลจาก xml เพียงอย่้างเดียว
1. โหลด jdom-x.x.jar จากนั้นก็ add เข้าไปในโปรเจค
2. ข้อมูลที่จะรับมาจาก ผู้ใช้งานโดยการ post เข้ามายัง Sevlet ที่เตรียมไว้จะมีลักษณะดังนี้

<Payments>
	<customer id='1'>
		<item>1001</item>
		<price>1000.00</price>
	</customer>
	<customer id='2'>
		<item>1002</item>
		<price>20.00</price>
	</customer>
</Payments>

3. เขียน code ดังนี้
Read more

[Java]MessageFormat : insert values between single quotes

หลังจากได้แนะนำการใช้ การจัด Format Message ก็ใช้งานมาเรื่อยจนวันนี้ ติดปัญหาเล็กน้อยในการ ใช้ MessageFormat สำหรับ format ข้อความที่มีเครื่องหมาย ” (single quotes) เนื่องจากหลังจาก format แล้วเครื่องหมาย ” จะหายไปโดยปริยาย เช่น

String msg = "Hi, '{0}' this is {1}";
String val = MessageFormat.format(msg, "test", "xx");
System.out.println(val);

ข้อความที่ได้จะกลายเป็น Hi, test this is xx
ด้วยความช่วยเหลือจาก อ.google ก็พบวิธีแก้ไขดังนี้

String msg = "Hi, ''{0}'' this is {1}";
String val = MessageFormat.format(msg, "test", "xx");
System.out.println(val);

โดยการเพิ่ม ” ครอบ ” อีกทีหนึ่ง

ลอกมาจาก
Java MessageFormat – How can I insert values between single quotes?

[Java]ปัญหาการส่งข้อมูลไปยัง Action ติดๆกัน

สืบเนื่องจากโปรแกรมเดิมที่พัฒนาด้วย Struts Framework และผ่านมาหลายสิบมือ มีปัญหาการส่งข้อมูล (summit) สองครั้งติดๆกัน ทำให้ข้อมูลซ้ำกันสองรายการ ซึ่งเสียเวลาในการแก้ไขปัญหานี้
ไป 3 ชม. เต็มๆพอแก้ไขได้แล้วก็เลยมา Note ไว้หน่อยเพราะปัญหานี้เป็นปัญหาแบบ เส้นผมบางภูเขาเหล่ากาจริงๆ ปัญหาที่ว่าเกิดจากการใช้งาน ปุ่ม summit ดังนี้

<html:submit property="bt_save" value="Save Data" onclick="doSaveAction();"/>

และ doSaveAction() เขียนประมาณนี้

function doSaveAction(){
	var form = document.getElementById("xx");  
	form.method = "post";
	form.submit();
}

จาก code ดังกล่าวทำให้เกิดการส่งข้อมูลไปให้กับ Action สองครั้งติดๆกัน เนื่องจากใช้ปุ่มเป็น summit อยู่แล้ว แต่ยังใส่ onclick เข้าไปด้วย หลังจากเปลี่ยนเป็น

<html:button property="bt_save" value="Save Data" onclick="doSaveAction();"/>

โปรแกรมก็ทำงานได้ปกติ แก้ปัญหาที่สะสมมานาน

How to set timeout in JAX-RPC Web Service client

การกำหนดค่า Timeout ให้กับ Web Service Client ที่เป็น JAX-RPC นั้นถ้าใช้งานกับ WebSphere ก็ไม่อยากอะไรครับมี method ให้กำหนด Timeout อยู่ในตัว Stub เลยแต่พอมาทำบน Netbean และใช้งานกับ GlassFish Netbean กลับไม่สร้างให้ วุ่นวายพอควร ก็เลยหาวิธีจาก อ.google แล้วพอมีหนทางประมาณนี้
1. สร้าง HttpURLConnection ขึ้นมาเองโดยการ extends HttpClientTransport แล้วทำการ Override method createHttpConnection ดังนี้

package com.secondknow.ws;
import com.sun.xml.rpc.client.http.HttpClientTransport;
import com.sun.xml.rpc.soap.message.SOAPMessageContext;
import java.io.IOException;
import java.net.HttpURLConnection;

/**
 * Example HttpTransport
 * @author Supot Saelao
 * @version 1.0
 */
public class ExampleHttpTransport extends HttpClientTransport{
    private int timeout;

    public ExampleHttpTransport(){
		super();
	}

    public ExampleHttpTransport(int timeout){
        this.timeout = timeout;
    }

    @Override
    protected HttpURLConnection createHttpConnection(String endpoint, SOAPMessageContext context) throws IOException {
        HttpURLConnection httpConn = super.createHttpConnection(endpoint, context);
		//If set tmeout 0 never set timeout
        if(timeout > 0){
            httpConn.setReadTimeout(timeout);
            httpConn.setConnectTimeout(timeout);
        }
        return httpConn;
    }
}

Read more

[javascript] How to get all elements in form

<html>
<head>
<script type="text/javascript">
	function showFormElement(){
		//Get all element from object form
		var els = document.getElementById('sys_form').elements;
		var str = "";
		for(var i = 0; i < els.length; i++){
			str += "type : "+ els[i].type +" name : "+ 
			els[i].name + " id : "+ els[i].id +" value : "+ 
			els[i].value + "\n";
		} 
		alert(str);
	}
</script>
</head>
<body>
<form id="sys_form" name="sys_form" target="#">
	<input type="hidden" name="el_hidden" id="el_hidden" value="I'm hidden" />
	<input type="text" name="el_text" id="el_text" value="I'm text" /><br />
	<select name="el_select" id="el_select">
		<option value="xxx">xxx</option>
	</select><br />
	<input type="checkbox" name="el_checkbox" id="checkbox" checked /><br />
	<input type="radio" name="el_radio" /><br />
	<textarea name="el_textarea" id="el_textarea">I'm textarea</textarea><br />
	<br />
	<input type="button" value="Show Info" onclick="showFormElement();" /> 
</form>
</body>
</html>

หมายเหตุ : ถ้าใช้ jQuery นี่คงสบายกว่านี้