2009-06-04 1 views
1

フォームデータを入力するjavaサーブレット(クラス)があります。javascript:フォーム値をjavascriptに渡して、httprequestに処理するのに問題があります

フォームはこの

<form name="masinser12" method="GET" action="MASInsert2"> 
<input type=hidden id="partnumber12" name="partnumber12" value="9999"> 
<input type=hidden id="itemdescription12" name="itemdescription12" value="1. test description"> 
<input id="m12" type="button" onclick="masinsert('"+ id +"')" value="Add"> 

<form name="masinser13" method="GET" action="MASInsert2"> 
<input type=hidden id="partnumber13" name="partnumber13" value="2222"> 
<input type=hidden id="itemdescription13" name="itemdescription13" value="2. test description"> 
<input id="m12" type="button" onclick="masinsert('"+ id +"')" value="Add"> 

ようになり、彼らが生成されたフォームのHTMLの頭の中にあるこのJavaScriptに投稿するように見ることができるように異なるIDでループ

//encode string for special characters 
    String encodedString = URLEncoder.encode(desc, "UTF-8"); 

    out_table.append("<form name=\"masinsert"+id+"\" method=\"GET\" action=\"MASInsert2\">\n"); 

    out_table.append("<input type=hidden id=\"partnumber"+id+"\" name=\"partnumber"+id+"\" value=\""+part+"\">\n"); 
        out_table.append("<input type=hidden id=\"itemdescription"+id+"\" name=\"itemdescription"+id+"\" value=\""+encodedString+"\">\n"); 


    out_table.append("<tr><td colspan=2><input id=\"m"+id+"\" type=\"button\" onclick=\"masinsert('"+ id +"')\" value=\"Add\"></td></tr>"); 

function masinsert(id) 
{ 
var currentTime=new Date(); 


var button = document.getElementById("m"+id); 
button.onclick=""; 
button.value="Inserting"; 

var partnumber  = document.getElementById("partnumber"+id).value; 
var itemdescription = document.getElementById("itemdescription"+id).value; 


function handleHttpResponse() 
    { 
    if (http.readyState == 4) { 
    button.value="Item Added"; 
    } 
    } 


var http = getHTTPObject(); // We create the HTTP Object 
var tempUrl = "\MASInsert2"; 
tempUrl += "?partnumber="+partnumber+"&"+"itemdescription="+itemdescription+"&"+"itemshortdescription="+itemdescription.substring(0,37) 
alert(tempUrl); 
http.open("GET", tempUrl, true); 
http.onreadystatechange = handleHttpResponse; 
http.send(null); 
    } 

function getHTTPObject(){ 
var xmlhttp; 
/*@cc_on 
@if (@_jscript_version >= 5) 
    try { 
    xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); 
    }catch (e){ 
    try { 
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
    }catch (E) { 
     xmlhttp = false; 
     } 
    } 
    @else 
    xmlhttp = false; 
    @end @*/ 
    if (!xmlhttp && typeof XMLHttpRequest != 'undefined') { 
    try { 
     xmlhttp = new XMLHttpRequest(); 
    } catch (e) { 
     xmlhttp = false; 
    } 
    } 
    return xmlhttp; 
} 

とJavaScriptスニペットを使用してデータベースにデータを挿入、このjavaファイルに周りと投稿になります

String partnumber = request.getParameter("partnumber"); 
    protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException { 
     response.setContentType("text/html"); 
     PrintWriter out = response.getWriter(); 
     String itemdescription = URLDecoder.decode(request.getParameter("itemdescription"), "UTF-8"); 
     String itemshortdescription = request.getParameter("itemshortdescription"); 
out.println(itemimport(partnumber,itemdescription, itemshortdescription)); 
} 

{ private String itemimport (String partnumber, String itemdescription, String itemshortdescription){ 
--- 
--- 
} 

私は読みやすさのためにパラメータの数を減らすことにしました。私が問題になるのは、URLDecodingとURLEncodingがJava PreparedStatementに正しく挿入される方法です。私はURLEncodedの値で設定された変数を持つ単純なhtmlフォームを作成したときに、うまく挿入されるため、問題をJavaScriptのどこかに絞り込んだ。しかし、私はJavaScriptを介してそれを実行すると、私はヌルエラーが発生します

これを行うには、より良い方法がありますか、なぜ値がそれをしていないアイデアですか? JavaScriptは、Post'edまたはGetになるように文字列をエンコードする際にいくつかの作業を必要としますか?

ありがとうございます。

UPDATE: 私はリーチrequest.getParamterにするSystem.out.printlnを行なったし、スクリプトが 文字列itemdescription = URLDecoder.decode(request.getParameter( "itemdescription")、 "UTF-8")で停止します;ここ ので、それは明らかに( "UTF-8"、request.getParameter( "itemdescription"))URLDecoder.decodeに問題がある

答えて

1

はしようとするいくつかのものです:あなたはJavaScriptで 、とあなたのURLのparaemtersをエンコードencodeURIComponent

tempUrl += "?partnumber="+encodeURIComponent(partnumber)+"&"+"itemdescription="+encodeURIComponent(itemdescription)+"&"+"itemshortdescription="+encodeURIComponent(itemdescription.substring(0,37)) 

次に、あなたがsetCharacterEncoding

最終を使用してリクエストにエンコーディングを設定する必要があり、私はあなたがrequest.getParameterを呼び出す場合、それはあなたのためにURLDecodingを行うと思います。

0

あなたはあなたのJavaScriptでリクエストパラメータの値

tempUrl + = "?部品番号=" +部品番号+ "& "+" itemdescription = "+(itemdescription)をエスケープ+" &" +をコードするURLである必要がありますように見えます"itemshortdescription =" +エスケープ(itemdescription.substring(0,37))

+0

エスケープとエスケープは廃止予定です - https://developer.mozilla.org/En/Core_JavaScript_1.5_Guide/Predefined_Functions/Escape_and_unescape_Functions –

+0

私に知らせてくれてありがとう:) – objects

関連する問題