package weber_4_0_sample.org.itscool.ajax;

import org.itscool.commons.util.InputCheckUtil;
import org.itscool.weber.action.Action;
import org.itscool.weber.action.ActionBucket;
import org.itscool.weber.controller.Globals;

/**
 * XMLHttpRequestは、XMLによってデータをやりとりするためのもので、
 * 本来の「Ajax」では、responseXMLプロパティを使ってサーバから送
 * られたXMLドキュメントを取得し、XSLTやDOMを利用してページ内容
 * を書き換えることになるだろう。
 *
 * しかし、responseTextプロパティを使えばXMLドキュメント内の
 * テキストデータを利用できるため、これを使って、XML構造は
 * 気にしない手法を使うことも多いだろう。それもまたAjaxだ。
 *
 * @author ios
 *
 */
public class AjaxSampleAction extends Action {
    
    /*
     * 【検討課題】
     * Ajaxのような非同期通信に対する入力チェックをどのように処理すべきか？
     *
     * 以下の例では、XMLHttpRequestの応答に、エラー画面全体のデータを返して
     * しまう。
     */
//    public String doValidate(){
//        String emp_no = (String)getParameter("emp_no");
//        if( !InputCheckUtil.checkDigit(emp_no) ){
//            this.putMessage("emp_no","数値を入力してください");
//            return "sample";
//        }
//        return Globals.RET_SUCCESS;
//    }
    
    /*
     * 【検討課題】
     * Ajaxのような非同期通信に対する入力チェックをどのように処理すべきか？
     *
     * 以下の例では、エラーメッセージを返すことはできるが、
     * クライアント側で、エラーなのか、正常なのか判断できない。
     */
//    public String doValidate(ActionBucket bucket){
//        String emp_no = (String)getParameter("emp_no");
//        if( !InputCheckUtil.checkDigit(emp_no) ){
//            try{
//                bucket.print("数値を入力してください");
//            }catch(Exception e){}
//            return Globals.RET_NOFORWARD;
//        }
//        return Globals.RET_SUCCESS;
//    } 
    
    /**
     * アクションを実行し、結果をテキストで出力します。<br>
     * このアクションの実行結果はGlobals.RET_NOFORWARDを返巣必要があります。<br>
     * XmlHttpRequestで非同期通信、同期通信を行う場合は、RequestDispatcher.forwardで
     * 画面を飛ばすと、XmlHttpRequestが画面の表示内容を受け取ってしまうため、
     * 結果がうまく表示されません。<br>
     * 又、bucket.printXml系のメソッドを実行すると、出力内容が確定し待っているため、
     * RequestDispatcher.forwardを呼び出すと、ServletExceptionがスローされます。
     * @param bucket ActionBucketインスタンス
     * @return Globals.RET_NOFORWARDを返します
     */
    public String doExecute(ActionBucket bucket)throws Exception{
        String emp_no = (String)getParameter("empNo");
        String emp_name = "該当なし";
        
        if( emp_no.equals("0000")){
            emp_name="太郎";
        }else if( emp_no.equals("0001")){
            emp_name="加納";
        }else if( emp_no.equals("0002")){
            emp_name="hanako";
        }
        System.out.println(emp_name);
        bucket.print(emp_name);
        
        return Globals.RET_NOFORWARD;
    }
}
