我有2个jsp页面。在第一个jsp页面中,我使用选择主题的组合框,几个单选按钮进行操作。在servlet这个页面上我得到request.getParameter("subjectID")
。
更好如果我展示servlet和jsp
<form action="/TutorWebApp/controller" method="POST" name="editTestForm">
<p>
Choose subject
<select name='subject'>
<c:forEach items="${subjects}" var="subject" >
<option value="${subject.key}">
${subject.value.getName()}
</option>
</c:forEach>
</select>
</p>
<input type="radio" name="command" value="add_test">
Add test <br />
<input type="radio" name="command" value="add_subject">
Add subject <br />
<input type="submit" value="OK"/>
</form>
在这个页面中,我从组合框中选择了主题。然后选择“添加测试”。我去servlet后
class AddTestCommand implements Command {
private static final String PARAM_TEST_NAME = "testName";
private static final String PARAM_SUBJECT = "subject";
@Override
public String execute(HttpServletRequest request) throws ServletException, IOException {
String page = " ";
String message = " ";
String testName = request.getParameter(PARAM_TEST_NAME);
if (testName != null && (!"".equals(testName))) {
HttpSession session = request.getSession(true);
Integer userID = (Integer) session.getAttribute("userID");
Integer subjectId =
Integer.valueOf(request.getParameter(PARAM_SUBJECT));
if(AddTestLogic.addTest(userID, subjectId, testName)){
message = "Success";
} else{
message = "This test already exist";
}
request.setAttribute("result", message);
}
page = ResourceBuilder.getPropertyManager(PropertyEnum.JSP_PAGE).
getProperty("path.page.addtest");
return page;
}
}
我可以在if(){}之前使用testName获得request.getParameter("subject");
附近的主题值。下一步 - 转到下一个jsp
<form action="/TutorWebApp/controller" method="POST" name="addTestForm">
<input type="hidden" name="command" value="add_test" />
Name of new test:
<input type="text" name="testName" value=""/>
<input type="submit" value="Add test"/>
</form>
在jsp中输入后的数据我再次转到同一个servlet。但我失去了值request.getParameter(“subject”)。
我尝试使用HttpSession,但在第一页上我发送了Map。只需从地图中选择subjectID即可获取请求。
我不知道如何解决这个问题。 感谢
答案 0 :(得分:2)
您可以使用隐藏字段保留下一个请求的请求参数。请求参数可由EL中的${param}
映射获得。所以,这应该做:
<input type="hidden" name="subject" value="${fn:escapeXml(param.subject)}" />
请注意,我正在使用JSTL fn:escapeXml()
来转义HTML实体;这样可以防止XSS attacks。