Wednesday, 5 September 2007

การป้องการกด submit หรือ refresh ซ้ำ ๆ ใน Struts

หลาย ๆ คนที่เคยใช้ Struts มา คงจะเคยประสบปัญหาคล้าย ๆ กัน นั่นคือ เมื่อกดปุ่ม submit หรือ refresh แล้ว ตัว Action ของ Struts จะจำค่าที่อยู่ใน request ตัวเดิม นำไป ประมวลผลอีกครั้งหนึ่ง (หมายความว่าทุกครั้งที่กดปุ่ม refresh หรือ submit action ก็จะทำงานตาม business process ที่กำหนดไว้ด้วยข้อมูลชุดเดิม ซ้ำ ๆ ) ซึ่งอาจส่งผลกระทบให้เกิดความผิดพลาดของข้อมูลโดยที่ไม่ตั้งใจ

วิธีหนึ่งที่ใช้ในการแก้ปัญหานี้นั่นคือ การใช้ method saveToken, isTokenValid และ resetToken ที่อยู่ใน class Action ของ struts นั่นเอง วิธีการก้อคือ

1. เพิ่ม saveToken(httpServletRequest) ลงใน action ตัวที่1 (คือหน้าที่จะมาเรียก page ที่ทำ business process)

2. เพิ่ม code ส่วนนี้ลงใน action ตัวที่จะต้องกันการกด submit ซ้ำ ดังนี้

if(isTokenValid(httpServletRequest)){
resetToken(httpServletRequest);
// ส่วนที่ทำการ add edit delete ข้อมูล
}else{
saveToken(httpServletRequest);
// กรณีที่ action forward กลับไปที่ page เดิม ไม่ต้องใช้ code ส่วนนี้
}


เพียงเท่านี้ ก้อจะป้องการกด submit และ refresh ซ้ำ ๆ ได้เป็นอย่างดี

บทความที่เกี่ยวข้อง

No comments: