我正在尝试使用隐藏表单将数组从一个jsp页面传递到另一个页面。
这是我的jsp文件的相关代码。
<td style="vertical-align: top;"><button onclick="getPlayerNames()"id="generate">Generate</button><br></td> <form id="playerNames" method="post" action="lineups.jsp"> <input type="hidden" id="players" /> </form> <script> function getPlayerNames(){ var selected = document.querySelectorAll("#selected-players > tr > td"); var playernames = []; for(var i=0; i<selected.length; ++i){ //alert(selected[i].textContent); var num = (i-1)%6; if(num==0){ playernames.push(selected[i].textContent); } } document.getElementById("players").values=playernames; alert(document.getElementById("players").values); document.getElementById("playerNames").submit(); }</script>
警报消息确实显示正确的值被放置在“玩家”中
然后在我的lineup.jsp中,我有:
<%String[] s = request.getParameterValues("players"); System.out.println(s[0]);%>
我在’System.out.println(s [0]);’的行上得到一个空指针异常
没有为输入标签指定name属性,如果未指定name属性,则不会发送任何值。
在您的情况下request.getParameter,request.getParameterValues返回相同的值,因为playerselement仅指定了一个。使用request.getParameter时将直接返回string,request.getParameterValues将返回string[]length 1。
request.getParameter
request.getParameterValues
players
string
string[]
1
如果您想派遣多个玩家并且不想在jsp中重复元素,请players使用以下特殊字符来连接该字符:
document.getElementById("players").value=playernames.join("::");
您可以将as作为字符串输入,lineup.jsp并可以使用相同的特殊字符将其拆分,如下所示:
lineup.jsp
<% String players = request.getParameter("players"); String[] s = players.split("::"); %>