- PR -

Actionクラスで、ActionErrorsを取得

1
投稿者投稿内容
まいこ
会議室デビュー日: 2005/07/01
投稿数: 9
投稿日時: 2005-07-06 22:16
*****  環境  *************************************************

・Windows2000(SP4)
・Tomcat5.0.28
・j2sdk1.4.2
・Eclipse2.1.3
・struts1.2.4



*****  状況  *************************************************

ActionFormクラスのValidate()メソッドで、エラーが発生した場合に、
Actionクラスの方でそのエラーが発生したかどうかは
どのエラーか発生したのかはわからなくてもよいので、
(ActionErrorsクラス).isEmpty()のような感じで
取得できるものなのでしょうか?

もしできるとするならば、どのようにコーディングをすればよいのか、
どなたかご教授をお願いいたします。



*****  ソース  *************************************************


[[[ My_form_input.java ]]]

public class My_form_input extends ValidatorForm {

private String name;

public String getName() {
return name;
}

public void setName(String pname) {
name = pname;
}

public ActionErrors validate(ActionMapping p_map, HttpServletRequest p_req) {

boolean b_ok=false;

ActionErrors errors = new ActionErrors();

if(errors.isEmpty()){
errors = super.validate(p_map, p_req);
}

if(errors.isEmpty()){
if(name.equals("aaaa") == true){
ActionMessage message = new ActionMessage("errors.myname");
errors.add( "myname_error", message);
}
}

return errors;

}

}


[[[ struts-config.xml ]]]

<action path="/err"
type="my.action.MY_action_error">
<forward name="upd" path="/WEB-INF/jsp/MY_cre_err.jsp" />
</action>

<action path="/input"
type="my.action.MY_action_web"
name="inputForm"
scope="request"
input="/err.do"
validate="true">


[[[ MY_action_error.java ]]]

public class My_action_error extends Action {

public ActionForward execute(ActionMapping p_map,
ActionForm p_form,
HttpServletRequest p_req,
HttpServletResponse p_res){

//ここの時点で、Validateのエラーはとれないものでしょうか?

}

}


tottmo
会議室デビュー日: 2004/05/30
投稿数: 11
投稿日時: 2005-07-06 22:51
ActionForm#validator()が返すActionErrorsがnullでなければ、struts-config.xmlのactionタグのinput属性に指定したページに遷移します。
つまりこの場合、Actionクラスが実行されないと思います。
masa
大ベテラン
会議室デビュー日: 2005/05/11
投稿数: 108
投稿日時: 2005-07-06 23:05
こんばんは。

このような遷移が一般的であるか、正しい使い方であるかは考えずにレスします。

HttpServletResponse p_res){
//ここの時点で、Validateのエラーはとれないものでしょうか?
ActionMessages ms = getErrors(p_req);
if (ms.isEmpty()) {
System.out.println("エラーはないよ。");
}
}
}

試した訳ではありませんが、こんな感じで取得出来そうですよ。
まいこ
会議室デビュー日: 2005/07/01
投稿数: 9
投稿日時: 2005-07-07 11:12
tottmo様・masa様


* 初アクセスhttp://localhost:8080/〜/err.doにアクセス

      ↓

* my.action.MY_action_error ←***
  DBアクセスなどをして、ActionFormにデータを入れ、
  request.setAttributeをする。

      ↓

* MY_cre_err.jspに遷移
  <html:text>に、setAttributeしたデータを入れる。

      ↓

* submitボタン押下 <form action="/input">

      ↓

* Validateのチェック

      ↓

エラーあり:my.action.MY_action_error ←***
    submitボタンを押した時点での入力データを
    ActionFormにつっこんで、request.setAttributeをする。
    (DBアクセスなどは行わない。)

      ↓

* MY_cre_err.jspに遷移
  <html:text>に、setAttributeしたデータを入れる。

ということをやりたかったのです。

<action path="/input"
type="my.action.MY_action_web"
name="inputForm"
scope="request"
input="/err.do"
validate="true">
のinput属性に、最初MY_cre_err.jspを指定したのですが、
setAttributeしたものがありませんなどといわれてしまい・・・。
エラーの際に、初とは違うActionでしたらよかったのですが・・・。

MY_action_errorに来た際に、Validateで来たのか初アクセスで来たのかの
見分けがつかなくて、質問をさせていただきました。
このようにするのが普通なのかどうかはわからないのですが、
思いついた方法でしたので・・・。

masa様のコーディングで無事にValidateエラーが取得できました!
とりあえず、これでがんばってみようかと思います。

またお世話になった時にはよろしくお願い申し上げます。
tottmo様・masa様、本当にありがとうございました。

1

スキルアップ/キャリアアップ(JOB@IT)