2012-05-05 7 views
1

私は2つのJSPページを持っています。最初のJSPページでは、件名を選択したコンボボックスを使用し、アクションのためのいくつかのラジオボタンを使用します。サーブレットでは、私はrequest.getParameter("subjectID")を取得します。私はこのページでは、サーブレットとJSPJSPをリロードし、サーブレットのrequest.getParameter( "...")を失う

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

を表示した場合、私はコンボボックスから対象を選択

良いです。 「テストを追加」を選択します。入力されたデータの後にアンを次の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> 

- 私は(あれば私が前にテスト名と近くrequest.getParameter("subject");などの対象の値を取得することができる場所があり

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

{})サーブレットに移動し、次のステップの後jspで私は同じサーブレットに再び行きます。しかし、私は値request.getParameter( "件名")を失う。

私はHttpSessionを使用しようとしますが、最初のページで私はマップを送信します。そして、要求に応じて、mapからsubjectIDを選んでください。

この問題の解決方法はわかりません。 ありがとう

+1

その名前と値で別の隠しフィールドを追加するだけですか? – BalusC

+0

@BalusC on jsp with textField? "" – Ray

+0

@BalusC私はubderstand ...私を助けることができますか? – Ray

答えて

2

次のリクエストのリクエストパラメータは、非表示フィールドで保持できます。リクエストパラメータは、ELの${param}マップで利用できます。だから、これは実行する必要があります。私は、HTMLエンティティをエスケープするJSTLfn:escapeXml()を使用してい

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

注意を。可能な限りXSS attacksを防ぎます。

+0

うわー、良いアドバイスをありがとう)))) – Ray

+0

よろしくお願いします。 – BalusC

+0

こんにちは@BalusC、ありがとうございます。なぜ、これがうまくいかないのだろうと思うのですが、エンドユーザが "F5"を押すか、 "Refresh"の代わりにページのページをリロードするためにURLの "Enter"キーを押すと、リクエストのparams_を保持するよう求められません。 ? – Omar

関連する問題