-1

HTML で JSP を使用して、別のページに送信するフォームがあります。フォームには、複数の要素を持つ選択リストがあります。フォームを送信する前に、java スクリプトで、リスト内のすべての要素が選択されていることを確認します。次に、フォームを次のページに送信します。次のページでは、リストで選択した値を Java 配列に割り当てます。配列のサイズまたはその配列内の任意の値を表示しようとすると、Null Pointer Exception が発生します。

リストを含む私のフォームは次のとおりです。

<form name="inputGenesForm" id="test" method="POST" ACTION="result.jsp" enctype="multipart/form-data">          
    <div style=" position:absolute;top:6%;left:39%;">
    ...
    ...
    <select id="inputSet2" multiple="multiple" style="position:absolute; top: 93px; left: 270px; width: 200px; height: 200px;">

result.jsp では、

<body background="image/geneBG.jpg">
<%       
    String [] selectedGenes= request.getParameterValues("inputSet2");
%>

<script>    
    alert(<%=selectedGenes.length%>);
</script>

誰でも助けることができますか?ありがとうございました。

フォームを result.jsp に送信する際のエラー:

type Exception report

message

descriptionThe server encountered an internal error () that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException: java.lang.NullPointerException
root cause

java.lang.NullPointerException
note The full stack traces of the exception and its root causes are available in the GlassFish Server Open Source Edition 3.1.2.2 logs.
4

5 に答える 5

1

select に name 属性を追加してみてください

<select name="inputSet2" ...>

" name 属性を持つフォーム要素のみが、フォームの送信時に値が渡されます。" http://www.w3schools.com/tags/att_input_name.asp

于 2012-11-28T15:43:17.307 に答える
1

results.jsp ファイルでは、代わりに次のように警告します。

alert(<%=request.getParameterValues("inputSet2")%>);

次の行を削除します。

String [] selectedGenes= request.getParameterValues("inputSet2");

inputSet2 フィールドが null であることを確認します。

また、結果ページに何が送信されたかを確認できるようにするには、フォームの post メソッドを次のように変更します。

<form name="inputGenesForm" id="test" method="get" action="result.jsp">

以下の問題に絞り込むことができなかった場合は、私が行って作業した小さなテストがあります.

フォーム.jsp

<html>
<head>
<title>Testing MultiSelect</title>
<script>
var validate= function() {
   if(document.forms.form1.select2.selectedIndex == -1) {
        alert("Please select one or more options");
        return false;
   }
   return true;
};
</script>
</head>
<body>
<form id="form1" name="form1" method="get" action="result.jsp">
      <select name="select2" size="3" multiple="multiple" tabindex="1">
        <option value="1">one</option>
        <option value="2">two</option>
        <option value="3">three</option>
        <option value="4">four</option>
        <option value="5">five</option>
        <option value="6">six</option>
        <option value="7">seven</option>
        <option value="8">eight</option>
        <option value="9">nine</option>
        <option value="10">ten</option>
      </select>
      <br>
      <input type="submit" name="Submit" value="Submit" tabindex="2" onclick="return validate()" />
</form>
</body>
</html>

結果.jsp

<html>
<head>
<title>Results Page</title>
</head>
<body>
<h1>These Are Your Results</h1>
<p>
<% String [] selectedGenes = request.getParameterValues("select2");
   for (String selectedGene : selectedGenes)
        out.println(selectedGene + "<br>");
%>
</body>
</html>

最初の 3 つのオプションを選択したところ、取得 URL は

result.jsp?select2=1&select2=2&select2=3&Submit=Submit
于 2012-11-28T15:27:29.477 に答える
1

request.getParameterValues() は、「enctype="multipart/form-data" と組み合わせて使用​​すると機能しません。

于 2013-01-28T21:06:00.173 に答える
0

最初に null 値をチェックするべきではありませんか?

selectedGenes.length

getParameterValues()のドキュメントには次のように書かれています。

指定されたリクエスト パラメータが持つすべての値を含む String オブジェクトの配列を返します。パラメータが存在しない場合は nullを返します。

(私の強調)

于 2012-11-28T15:14:12.887 に答える