我录制了15秒的视频来显示此错误:https://www.youtube.com/watch?v=LYQ4pjo5rV8
我正在尝试为管理员创建一个Web应用程序来管理成员。
因此,管理员可以从下拉列表中选择更新操作或删除操作,以便为特定成员执行。
为下拉列表设置了 onchange
。
因此,如果管理员选择了某个操作,则表单将提交给MemberAdmin
servlet。
然后MemberAdmin
将对成员执行更新或删除功能。
我将参数传递给servlet时遇到了困难。
即使我对表单使用get
方法,我的servlet也无法接收任何参数。
我希望有像
这样的网址http://localhost:8080/Assignment/MemberAdmin?action=update~M0001
但是我得到了这个网址:
http://localhost:8080/Assignment/MemberAdmin?
update
- 选定的操作
~
- 充当分隔符
M0001
- 会员ID
从数据库中获取所有成员的数据后,我逐行打印出来。
我的form
是否有任何问题?
<%@page import="java.sql.Date"%>
<%@page import="java.util.ArrayList"%>
<%@page import="domain.Member"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<jsp:useBean id="memberControl"
class="control.MemberControl" scope="page" >
</jsp:useBean>
<html>
<head>
<link type="text/css" rel="stylesheet" href="https://cdn.datatables.net/1.10.16/css/jquery.dataTables.min.css" />
<script type="text/javascript" src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script type="text/javascript" src="https://cdn.datatables.net/1.10.16/js/jquery.dataTables.min.js"></script>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
<title>Environmental Society</title>
<script type="text/javascript">
$(document).ready(function () {
$('#myTable').DataTable();
});
</script>
<script type="text/javascript">
function actionFunc(sel) {
if (sel.options[sel.selectedIndex].text === "Delete") {
if (confirm("Confirm to delete this member?")) {
document.getElementById("actionForm").submit();
}
} else {
document.getElementById("actionForm").submit();
}
}
</script>
</head>
<body id="body">
<div id="bodyContent" style="color: black; overflow-y: scroll;">
<%
ArrayList<Member> member = new ArrayList<Member>();
member = memberControl.getAllRecord();
%>
<h3 style="text-align: left">Select the member you wish to update:</h3>
<p>
<table class="display" cellspacing="0" width="100%" id="myTable" style="padding-top: 5px">
<!--column width-->
<thead>
<tr class="memberAdmin">
<th class="memberAdmin">No</th>
<th class="memberAdmin">ID</th>
<th class="memberAdmin">Name</th>
<th class="memberAdmin">Action</th>
</tr>
</thead>
<%
for (int i = 0; i < member.size(); i++) {
String id = member.get(i).getId();
String name = member.get(i).getName();
%>
<form action="../MemberAdmin" method="get" id="actionForm" name="actionForm">
<tr class="memberrow">
<td class="member"><%=i + 1%></td>
<td class="member"><%=id%></td>
<td class="member"><%=name%></td>
<td class="member">
<select name="action" id="action" onchange="actionFunc(this)">
<option disabled selected value>- select action -</option>
<option value="update~<%=id%>">Update</option>
<option value="delete~<%=id%>">Delete</option>
</select>
<button type="submit" value="submit" name="button" hidden=""></button>
</td>
</tr>
</form>
<%}%>
</table>
</p>
</div>
</body>
</html>
感谢任何帮助。我一直在解决这个问题好几个小时。
*没有web.xml错误。
答案 0 :(得分:0)
根据你在视频中的输出,它清楚地告诉空指针异常意味着没有获得你在进一步服务器端进程中使用的参数值。
你能告诉服务器端你是怎么想的吗?
它应该像request.getParameter(&#34; action&#34;),您将获得正确的值。 getParameter用于从表单数据和URL查询字符串中检索参数。确保您没有使用getAttribute,它在请求生命周期中通过流程链传输数据。
如果您对自己的选项中的硬代码值有疑问,请尝试检查它是否按预期工作。
答案 1 :(得分:0)
发现我的javascript存在问题
将document.getElementById("actionForm").submit();
更改为sel.form.submit();
由于循环,每行的格式都为id="actionForm"
。
所以也许编译器不知道我真的想提交哪种形式。
function actionFunc(sel) {
if (sel.options[sel.selectedIndex].text === "Delete") {
if (confirm("Confirm to delete every thing about the member?")) {
sel.form.submit();
}
} else {
sel.form.submit();
}
}