1

2つのjsp-pageがあります。最初のjspページでは、件名を選択するコンボボックス、アクション用のいくつかのラジオボタンを使用します。このページのサーブレットでは、が表示されますrequest.getParameter("subjectID")

サーブレットと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>

このページでは、コンボボックスから件名を選択します。そして、「テストの追加」を選択します。サーブレットに行った後

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;
    }
}

request.getParameter("subject");ここで、if(){}の前にtestNameに近いサブジェクトの値を取得できます。次のステップ-次の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にデータを入力した後、同じサーブレットに再度移動します。しかし、私は値request.getParameter( "subject")を失います。

HttpSessionを使おうとしていますが、最初のページでMapを送信します。そして、MapからsubjectIDを選択するだけでリクエストを取得できます。

この問題をどのように解決するかわかりません。ありがとう

4

1 に答える 1

2

非表示フィールドを使用して、次のリクエストのリクエストパラメータを保持できます。リクエストパラメータは${param}、ELのマップで利用できます。したがって、これは次のことを行う必要があります。

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

JSTL fn:escapeXml()を使用してHTMLエンティティをエスケープしていることに注意してください。これにより、 XSS攻撃の可能性を防ぐことができます。

于 2012-05-05T19:36:32.870 に答える