重新加载jsp并在servlet上丢失request.getParameter(“...”)

时间:2012-05-05 18:25:59

标签: java jsp servlets request httpsession

我有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即可获取请求。

我不知道如何解决这个问题。 感谢

1 个答案:

答案 0 :(得分:2)

您可以使用隐藏字段保留下一个请求的请求参数。请求参数可由EL中的${param}映射获得。所以,这应该做:

<input type="hidden" name="subject" value="${fn:escapeXml(param.subject)}" />

请注意,我正在使用JSTL fn:escapeXml()来转义HTML实体;这样可以防止XSS attacks