我在Web应用程序上使用普通JSP(JSF不是一个选项)。在JSP文件中,我有一个表,每行显示每个学生。此外,在每一行中,我想要一个“编辑”按钮,该按钮将重定向到我们可以编辑该学生并删除它的页面。
到目前为止,我认为最好的想法是在每行中放入一个只有一个按钮的可提交表单。
<table border="1">
<tr>
<th>Name</th>
<th>LastName</th>
<th>Send Message</th>
<th>Erase</th>
</tr>
<c:forEach items="${students}" var="bean">
<tr>
<td>${bean.name }</td>
<td>${bean.lastName }</td>
<td><input type="button" name="edit" value="Do!"
onclick="foo();" /></td>
<td><form action="<%="EditStudent?studentid=6" %>"><input type="submit" value="Edit" /></form></td>
</tr>
</c:forEach>
</table>
表单提交URL仅用于测试,因此硬编码的“6”参数作为学生ID。但是,当我按下按钮时,我会被重定向到一个URL为"http://localhost:8080/JSPProj/EditStudent?"
的页面,在那里我可以清楚地看到问号后的任何文本都被忽略了!如果我删除了问号,则URL重定向有效(但是无法将我想要的参数传递给下一个servlet)。
任何人都可以告诉我为什么会这样吗?
PS。我也试过EL,同样的事情发生了。
答案 0 :(得分:2)
首先,您应该指定您的method = get或method = post。但这只是我的挑剔。问题是:不要把你的?和动作网址中的参数。将参数放在输入标签中。
<form action='EditStudent'>
<input type='hidden' name='studentid' id='studentid' value='6' />
<input type='submit' value='Edit' />
</form>
编辑:实际上GET与POST不是挑剔。对我来说,这是一种讽刺。这很重要。默认情况下,浏览器会将其视为GET,这意味着参数将在地址栏中可见,并且可以由最不熟练的用户轻松更改。使用POST它至少需要更复杂的猴子。虽然显然您不应该依赖公开可见的HTML来保护您的安全。
输入类型='隐藏'并不意味着用户在查看源代码时无法看到它,显然,只是没有文本框放在那里。
答案 1 :(得分:1)
1)首先,您不应该在给定的上下文中使用表单操作,因为在这种情况下使用POST方法不合逻辑。
2)你绝不应该在jsp表达式语言中使用静态内容。 ie: action="<%="EditStudent?studentid=6" %>"
3)在给定的情况下,您需要为每个列出的学生使用<a>
,并根据他们的ID将其重定向到servlet。这种方法将使用GET
方法。
这就是你应该做的事情 <a href="EditStudent?studentid=${bean.studentID}"> click me </a>
此致