※ 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を触り始めて間もないですので質問自体が的外れかもしれません・・・ 何かアドバイスをいただけたら幸いです。
Struts2のValidation後のパラメータ
Struts2のValidation機能を利用して入力チェックを行っているのですが、
入力画面表示時にGETパラメータを使用している場合、バリデーションエラーでINPUT画面に戻った際にGETパラメータが消えてしまいます。
Struts2: 2.3.15を使用しています
入力画面(index.jsp)は"simple/index.action?id=aa"のようにURLにGETでIDを指定する形式で表示します。(画面上に「ID:aa」が表示されます)
次にタイトル未入力のまま「確認」ボタンを押すとValidationが実行されてエラーメッセージとともに入力画面に戻ってくるのですが、「ID:」と表示され、Actionクラス(Index.java)のidが未設定の状態になります。
Validationエラー後もidがセットされ「ID:aa」が表示されるようにするにはどうすれば良いのでしょうか?
Struts2 を触り始めて間もないですので質問自体が的外れかもしれません・・・
何かアドバイスをいただけたら幸いです。
よろしくお願いいたします。
サンプルコードを以下に示します。
[struts.xml]
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="simple" extends="struts-default">
<action name="index" method="index" class="simple.action.Index">
<result name="success">/index.jsp</result>
</action>
<action name="confirm" method="confirm" class="simple.action.Index">
<result name="success">/confirm.jsp</result>
<result name="input">/index.jsp</result>
</action>
</package>
</struts>
[Index.java]
package simple.action;
import com.opensymphony.xwork2.ActionSupport;
public class Index extends ActionSupport{
private String id;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String index(){
return SUCCESS;
}
public String confirm(){
return SUCCESS;
}
}
[Index-confirm-validation.xml]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
<!-- タイトルの必須入力チェック-->
<field name="title">
<field-validator type="requiredstring">
<message>タイトルを入力してください</message>
</field-validator>
</field>
</validators>
[index.jsp]
<%@ 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:textfield name="title" label="タイトル" ></s:textfield>
<s:submit value="確認"></s:submit>
</s:form>
</body>
</html>
お礼
ご回答ありがとうございます!! バリデーションエラーの場合は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>