電子書籍の厳選無料作品が豊富!

Validator機能を使用し未入力チェック。
それ以外のエラーはアクションクラスにてチェックしようと考えております。

Validatorでは画面遷移させずに<html:errors />空間にエラーメッセージを表示させているのですが。
アクションクラスから同画面に遷移(?)し、<html:errors />にメッセージを表示させるにはどのようにすればよいでしょうか。

LoginAction.java--------------
if(!Error.IsNum(id) || !Error.IsNum(pass)){
//どこに何を返せばいいのかがわからない
return ?;
}
//正常であればそのまま遷移
return mapping.findForward("login");

A 回答 (1件)

画面遷移とエラーメッセージの表示方法はいくつかあります。



1.
---- struts-config.xml ----
<global-exceptions>
<exception key="login.error" type="java.lang.Exception" path="/login.jsp" />
</global-exceptions>
または
<action path="/Login"・・・>
<exception key="login.error" type="java.lang.Exception" path="/login.jsp" />
<foward name="login" path="/aaa.jsp" />
</action>

---- MessageResource.properties ----
login.error=ログインID、またはパスワードが違います。

---- LoginAction.java ----
public ActionForward execute(ActionMapping mapping, ・・・) throws Exception {
if(!Error.IsNum(id) || !Error.IsNum(pass)){
throw new Exception("login error");
}
return mapping.findForward("login");
}

struts-config.xmlのglobal-exception(またはactionのexception)でExceptionから遷移先と、エラーメッセージを選択する方法
これを行う場合は独自のExceptionを作成したほうがいい。(LoginExceptionみたいな)


2.
---- struts-config.xml ----
<action path="/Login" ・・・>
<foward name="self" path="/login.jsp" />
<foward name="login" path="/aaa.jsp" />
</action>

---- MessageResource.properties ----
login.error=ログインID、またはパスワードが違います。

---- LoginAction.java ----
public ActionForward execute(ActionMapping mapping, ・・・) {
if(!Error.IsNum(id) || !Error.IsNum(pass)){
// エラーメッセージを登録
super.addErrors(request, new ActionMessage("login.error"));
// 遷移元(またはエラー画面)へ遷移
return mapping.findForward("self");
}
return mapping.findForward("login");
}

3.
<html:errors/>に表示されるのは「org.apache.struts.action.ERROR」の名前で登録されたActionMessagesなので

---- LoginAction.java ----
public class LoginAction {
private ActionMessages error = new ActionMessages();
public ActionForward execute(ActionMapping mapping, ・・・) {
if(!Error.IsNum(id) || !Error.IsNum(pass)){
// エラーメッセージを登録
error.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("login.error"));
request.setAttribute("org.apache.struts.action.ERROR", error);
// 遷移元(またはエラー画面)へ遷移
return mapping.findForward("self");
}
//正常であればそのまま遷移
return mapping.findForward("login");
}

3はお勧めしません。
    • good
    • 0
この回答へのお礼

有難うございます。
2の方法で実装させていただきました。
fowardは複数定義できるんですね。

お礼日時:2009/11/06 09:25

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!