0

我正在 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,同样的事情发生了。

4

2 回答 2

2

首先,您应该指定您的 method=get 或 method=post。但这只是我的吹毛求疵。问题是这样的:不要把你的 ? 和操作 url 中的参数。将您的参数放在输入标签中。

<form action='EditStudent'>
<input type='hidden' name='studentid' id='studentid' value='6' />
<input type='submit' value='Edit' />
</form>

编辑:实际上 GET 与 POST 并没有挑剔。我这么说有点轻率。这很重要。默认情况下,浏览器会将其视为 GET,这意味着参数将在地址栏中可见,并且可以由最简单的用户轻松更改。使用 POST 至少需要更复杂的操作。尽管很明显,您不应该依赖可公开查看的 HTML 来确保您的安全。

Input Type='Hidden' 并不意味着用户在查看源代码时看不到它,显然,只是没有文本框放在那里。

于 2013-04-17T22:36:43.030 回答
1

1)首先,您不应该在给定的上下文中使用表单操作,因为在这种情况下使用 POST 方法是不合逻辑的。

2)你不应该在jsp表达式语言中使用静态内容。ie: action="<%="EditStudent?studentid=6" %>"

3)在给定的情况下,您需要<a>为每个列出的学生使用并根据他们的 ID 将他们重定向到一个 servlet。而这种方法将使用GET方法。

这是你应该做的 <a href="EditStudent?studentid=${bean.studentID}"> click me </a>

问候,

于 2013-04-17T23:27:57.357 回答