2012-03-19 2 views
2

これはおそらく私の誤解とJSPとJSTLの不完全な情報が原因です。私はその要素IDと「XXX未満の数値、」特定の制約に適合するために他の要素をチェックし、フォームを保存しようとしていたとき、私は、このような要求オブジェクトでsetParameterを呼び出すにはどうすればよいですか?

<input name="elementID" value="${param.elementID}"/> 

などの入力要素を持つWebページを持っています。私はエラーメッセージを表示します。すべてのパラメータが保存されるため、エラーを修正した後で再度入力する必要はありません。

保存した後、編集するオブジェクトの同じページにリダイレクトするときに、request.setParameter("elementID",..)のようなパラメータを設定する方法があります。これを行う方法はありますか?しかし私が見つけることができる唯一のものはrequest.setAttributeです。

+0

"request.setParameter(" elementID "、..)のようなパラメータを設定する方法を探しています。どうして? – EJP

+0

あなたはすでに正しい方法を見つけました。何が問題なの? XSS攻撃の穴があることに注意してください。不明な点がある場合は、具体的な例については、サーブレットのwikiページを参照してください:http://stackoverflow.com/tags/servlets/info – BalusC

+0

ありがとう。私はrequest.setAttributeと一緒に行った。私のでrequestScope.attributeを使用しましたが、検証が失敗するたびに、ユーザーが入力した値を保持するために要求パラメータから属性を復元します。検証が済むと、データを私のbeanにプッシュします。より良い設計アプローチがありますか? XSSの攻撃ホールについては、現場のボスが私にスクリプトレットとjdbcを強制的に書き込ませようとします。私はほとんどjstlを使用する許可を得ることができませんでした。このXSS攻撃ホールより大きな穴があります。 –

答えて

5

HTTPレスポンスを通過パラメータをサポートしていません。
JSP/Serveletsでは、その目的でrequest.setAttributeまたはsession.setAttributeを使用できます。どちらの方法も、リダイレクト先のページを処理するときに利用できます。したがって、基本的には、それは正しいと言えます...

また、クライアント側の検証を確認することもできます。クライアント側のスクリプト(javascript)を使用して検証するまでフォームを作成します。

0

サーブレットがフォームを処理した後(つまり、ユーザー入力をデータベースに保存した後)、フォームを含む同じJSPへのリクエストをサーブレットに転送させます(要求が失われるためリダイレクトされません)。サーブレットが同じリクエストオブジェクトを返すだけなので、パラメータを設定する必要はありません。

これと同様の入力を有していなければならないフォームを含むJSP:

<form> 
... 
<input type="text" value="${elementid}"/> 
... 
</form> 

構文$ {VARNAMEは} ELあります。したがって、すでにelementidに値がある場合、そのtextfieldにはその値が入ります。あなたはELおよび/またはJSTLを使用していない場合は別の方法として、あなたはスクリプトレット(それは、EL非常にunadvisableであり、および/またはJSTLが邪魔でなければなりません)を使用します。

<form> 
... 
<input type="text" value="<%= request.getParameter("elementid") %>"/> 
... 
</form> 
関連する問題