当前位置: 首页 > 知识库问答 >
问题:

在servlet上重新加载jsp并丢失request.get参数("...")

楚帅
2023-03-14

我有2个jsp页面。在第一个jsp页面中,我使用选择主题的组合框,几个单选按钮用于操作。在这个页面上,我收到了请求。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;
    }
}

在那里,我可以根据请求获得主题的值。getParameter(“主题”) near-转到下一个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。但我失去了价值要求。getParameter(“主题”)。

我尝试使用HttpSession,但在第一页上我发送了Map。并获得请求,只需从地图中选择主题。

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

共有1个答案

年嘉禧
2023-03-14

您可以使用隐藏字段为下一个请求保留请求参数。请求参数可通过EL中的${参数}映射获得。因此,这应该做到:

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

注意,我使用JSTL:escapeXml()来转义HTML实体;这将防止可能的XSS攻击。

 类似资料:
  • 我回来时问了同样的问题,但这次有更多的记录。我有一个包含许多servlet和JSP的web应用程序。应用程序有一个登录选项。在登录servlet中,我启动一个新会话,在会话中放置一些信息后,我转到一个JSP。 登录。java相关代码: 转发后,我得到一个名为Insert.jsp的Jsp页面,在那里我得到会话属性。 插入jsp相关代码: 在这之后,我有一个表单将我引导到servlet Adaugar

  • 问题内容: 我正在编辑搜索表单,并尝试防止数据库中的特殊字符。在JSP搜索表单中,(多重选择)下拉列表允许用户选择将在查询中使用的描述(注意:description是字符串列表): 提交表单时,页面会动态生成URL,该URL在URL中使用查询参数(丑陋,我知道,双手被绑住了)。这是描述段的摘要。 我在数据库中有一个测试条目,其描述是: AAA`〜!@#$%^&*()_ +-= {} | [] \:

  • 我有一个名为campaignMaint.java的Servlet,其中有一个doGet和一个doPost,还有一个名为jcampaignMaint.JSP的JSP。在输入URL/campaignMaint?campaign=Treasury时,doGet将数据构建为数组并执行: jcampaignMaint.jsp然后构建一个包含一些可修改字段的表,如下所示: 单击Submit按钮时,HTTP P

  • 我有一个login JSP,它从文本框中的用户获取用户名/密码,并在提交时使用POST方法将用户名/密码参数转发到login Servlet。 现在我正在使用介于两者之间的Paros代理(作为中间人攻击)来陷阱参数。从JSP接收的参数在Paros中以纯文本形式捕获。

  • 我有2个问题 1)我有一个login.jsp页和索引页。一旦我验证了用户(在servlet ie中),用户将被重定向到index.jsp页面。我用servlet的这条线重定向它 这个过程运行良好。但是当我刷新页面时,我会被重定向回登录页面。另外,我注意到在index.jsp页面上,我得到的名字而不是index.jsp,即我的servlet名称得到displayed.for这样的例子得到代替显示 2

  • 我通过AJAX请求从数据库中获取表数据。我需要更改AJAX请求中的数据参数并刷新表。 我正在用命令刷新表格 我有以下代码 但是在AJAX重新加载之后,会向服务器发送原始请求,并忽略新的参数值。我试图通过函数、全局变量和浏览器存储将数据传递给请求,但这些方法都不起作用。在互联网上,我找到了解决问题的方法 功能,但我不知道如何使用它。 我的jQuery数据表版本是1.10.7。 我还尝试使用以下代码销