7

Struts でログイン ページを作成しようとしています。アイデアは、ユーザーが存在するかどうかなどを検証し、エラーがある場合は、エラーが赤で表示されたログイン ページに戻ることです (通常のログインまたは任意のフォーム ページの検証)。

誰かが Struts のエラー管理チュートリアルを知っているかどうか知りたいです。私は特にチュートリアル(または例)を探しています

<html:errors>

タグ、私の問題を解決すると思います。

4

3 に答える 3

16

1 つ: //struts.apache.org/1.3.5/struts-taglib/apidocs/org/apache/struts/taglib/html/package-summary.html#package_description

ここでは Struts 1 を想定しています。Struts 2 で変更されたかどうかはわかりません。

メッセージリソースファイルにerrors.headerとerrors.footerを入れることができます:

errors.header=<h3><font color="red">Errors:</font></h3><ul>
errors.footer=</ul>

ヘッダーとフッターは、ActionErrors オブジェクトにエラーがある場合にのみ表示されます。

Action クラスで、次のようにします。

ActionErrors errors = new ActionErrors();
if (badInput) {
  errors.add(ActionErrors.GLOBAL_ERROR,
    new ActionError("error.bad.input", badString);    // key in messages resource file
                                    // badString will replace {0} in message
}

次に、戻る前に:

saveErrors(request, errors);

メッセージ リソース ファイル内:

error.bad.input=<li>Bad input:  '{0}' is invalid.</li>

<html:errors/>タグが処理されると、次のようになります。

<h3><font color="red">Errors:</font></h3><ul>
<li>Bad input: 'xxyyzzz' is invalid.<li>
</ul>
于 2009-06-02T03:22:27.897 に答える
10

ここに簡単な要約があります。クラスがあり、次ActionFormのように言いますMyForm

<form-bean name="myForm" type="myapp.forms.MyForm"/>

クラスがあり、次Actionのように言いますMyAction

<action path="/insert" type="myapp.actions.MyAction" name="myForm"
   input="/insert.jsp" validate="true" />
  <forward name="success" path="/insertDone.jsp"/>
</action>

アクションの「名前」は、フォーム Bean の「名前」を参照します。クラスが自動的に呼び出されるメソッドを定義する必要validate="true"があるため:ActionFormMyFormvalidate()

public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
  ActionErrors errors = new ActionErrors();
  if ((username==null) || (username.length() < 1)) 
      errors.add("username", new ActionError("error.username.required"));
  return errors;
}

空の ActionErrors オブジェクトが返された場合、Struts は MyAction.execute() を呼び出します。それ以外の場合、Struts は /insert.jsp を表示し (それは指定した input= parm であるため)、html.errors タグを展開して ActionErrors からのエラーを表示します。

于 2009-06-04T16:40:59.200 に答える