0

私のjspページには、テキストボックスに入力されたすべての値を取得するためのjavascriptコードがあります。そして、それらを配列に入れ、次のページに渡します。これは私のJavaScript関数です

function gt2()
{
    var pqr="100";
    var arr=new Array();
    var x=<%=height%>;
    var attstr=null;
    for(var t=0; t<x; t++)
    {
        var a="inputText"+t;
           
        var e=document.getElementById(a);
        var val= e.value;
            
        arr[t]=val;
                
        if(t==0)
        {
            attstr=arr[t]+",";
        }
                
        if((t!=x)&&(t!=0))
        {
            if(t==x-1)
            {
                attstr+=arr[t];
            }
            else
            {
                attstr+=arr[t]+",";
            }
        }
    }
    window.location.assign("gt_Iba2?value="+attstr);
}    

2 番目の jsp ページで、その値を取得しています。

String newValue=request.getParameter("value");
System.out.println("!###The new value in second jsp is "+newValue);
String[] allvalues=newValue.split(",");
System.out.println("The length of allvalues is "+allvalues.length);

最初の jsp には 5 つのテキスト ボックスがあります。私のコードは、これらのテキストボックスから値を正しく選択し、特殊文字が含まれていない場合にのみ他のページに渡します。 img1

上記の条件の出力は私にとっては問題ありません。

!###The new value in second jsp is A|B|C|Dbcdrt,A|B|C|Dbcdrt,A|B|C|Dbcdrt,A|B|C|Dbcdrt,A|B|C|Dbcdrt
The length of allvalues is 5

したがって、#、&、% などの文字を追加すると、配列が壊れます。つまり、その文字の後に他の値を取得していません。

この場合img2

3 番目のテキスト ボックスに「&」記号を追加しました。だから私はこのような出力を得ています

!###The new value in second jsp is A|B|C|Dbcdrtdf,A|B|C|Dbcdrtdf,A|B|C|Dbcdrtdf 
The length of allvalues is 3

その「&」記号の後は、値が表示されません。サイズも 3 です。これを 2 番目のテキスト ボックスに追加すると、サイズは 2 になります。これらのシンボルでこの動作が行われるのはなぜですか?これらのシンボルも渡す必要があります。ここで何が問題なのですか?助けが必要です

ありがとう

4

2 に答える 2

1

問題#&%?は、URI/URL の一部として使用される場合、文字がすべて予約文字であることです。以下を使用する必要があります。

var val= encodeURIComponent (e.value);

これにより、これらの文字が URI エスケープされ、URI は有効なままになります。

個人的には Array.join を使用して、配列をコンマでも連結します。

    function gt2()
    {
        var pqr="100";
        var arr=new Array();
        var x=<%=height%>;

        for(var t=0;t<x;t++)
        {
            var a="inputText"+t;

            var e=document.getElementById(a);
            var val= encodeURIComponent (e.value);

            arr[t]=val;
        }

        var attrstr = arr.join(',');

        window.location.assign("gt_Iba2?value="+attstr);
    }

PSあなたのループ(t!=x)では常にtrueになります。

于 2013-10-09T10:00:33.567 に答える