• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Struts2のValidation後のパラメータ)

Struts2のValidation後のパラメータ

このQ&Aのポイント
  • Struts2のValidation機能を利用して入力チェックを行っているのですが、入力画面表示時にGETパラメータを使用している場合、バリデーションエラーでINPUT画面に戻った際にGETパラメータが消えてしまいます。
  • 入力画面(index.jsp)は"simple/index.action?id=aa"のようにURLにGETでIDを指定する形式で表示します。(画面上に「ID:aa」が表示されます) 次にタイトル未入力のまま「確認」ボタンを押すとValidationが実行されてエラーメッセージとともに入力画面に戻ってくるのですが、「ID:」と表示され、Actionクラス(Index.java)のidが未設定の状態になります。
  • Validationエラー後もidがセットされ「ID:aa」が表示されるようにするにはどうすれば良いのでしょうか? Struts2を触り始めて間もないですので質問自体が的外れかもしれません・・・ 何かアドバイスをいただけたら幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
noname#247307
noname#247307
回答No.1

バリデーションの話かと思ってコードを読んでいたのですが……、よくよく読むと、バリデーションは関係ないわけですね? 要するに、URLにクエリー文字列(?id=aaの部分)としてつけたものを<s:property>で表示させてるが、バリデーションでリダイレクトされると消えてしまうので何とかしたい、ということですね。 リダイレクト先のアドレスにはクエリー文字列はついてないので、消えるのは当たり前です。クエリー文字列で渡したものをPOST送信後に引き続き受け取りたいとするなら、フォームの送信先アドレスにもクエリー文字列を指定しておくか、あるいはフォームに非表示フィールドなどで値を保持しておくかしないとダメでしょう。 とりあえず、ActionSupportクラスにexecuteをオーバーライドして、そこでthis.getIdをチェックして空ならプロパティを設定するなりして対応してはどうでしょう。

chiba-_-chiba
質問者

お礼

ご回答ありがとうございます!! バリデーションエラーの場合はActionクラスに処理が渡る前にはじかれると思っていました・・・(setterは呼ばれるんですね) ご指摘のとおりhiddenに渡したら期待通りの動きをしました。 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags"%> <%@ taglib prefix="sj" uri="/struts-jquery-tags"%> <!DOCTYPE html> <html> <body> ID:<s:property value="id" /> <s:form action="confirm"> <s:hidden name="id" value="%{id}"/> <s:textfield name="title" label="タイトル" ></s:textfield> <s:submit value="確認"></s:submit> </s:form> </body> </html>

関連するQ&A