在JSP中检索多个选择值时出现空指针异常

时间:2012-11-28 15:12:44

标签: java html jsp

使用JSP,在我的HTML中,我有一个表单,我提交到另一个页面。表单有一个包含多个元素的选择列表。在提交表单之前,在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.

5 个答案:

答案 0 :(得分:1)

result.jsp文件中的

改为警告:

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

并删除此行:

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

确定inputSet2字段为空的事实。

此外,为了能够看到发送到结果页面的内容,请更改您的表单发布方法以获取:

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

如果你无法缩小到下面的问题是我做了一点测试并开始工作。

form.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>

result.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>

我选择了前三个选项,获取网址是

result.jsp?select2=1&select2=2&select2=3&Submit=Submit

答案 1 :(得分:1)

尝试在选择

中添加name属性
<select name="inputSet2" ...>

“只有具有name属性的表单元素才会在提交表单时传递其值。”http://www.w3schools.com/tags/att_input_name.asp

答案 2 :(得分:1)

request.getParameterValues()与“enctype =”multipart / form-data“无法结合使用”

答案 3 :(得分:0)

你不应该首先检查这个空值吗?

selectedGenes.length

getParameterValues()的文档说:

  

返回包含所有值的String对象数组   给定请求参数有,或者如果参数不存在则 null

(我的重点)

答案 4 :(得分:0)

我遇到了同样的问题,我解决了:

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