4

送信時に検証する必要があるフォームがあります。public void validate()アクションクラスに追加しました。ただし、フォームがまだ送信されていない場合、最初のページの読み込みでもエラーが表示されます。

thisthisを読みましたが、何も解決しませんでした。最初のフォーム読み込み時に検証をスキップするような単純なことを実装するのは本当に難しいですか? :(

アクションクラス内で手動検証を使用しています。

struts.xml

<action name="login" class="community.action.LoginAction">
    <result name="success" type="redirect">/forums/list</result>
    <result name="login">/WEB-INF/login.jsp</result>
    <result name="input">/WEB-INF/login.jsp</result>
</action>

LoginAction.java

public void validate() {
    //validation rule
    addActionError("Error message");
}

public String execute() {
    if (//username and password correct) {
        return SUCCESS; //redirect to forums page
    } else {
        return LOGIN;
    }
}

現在、フォームが送信されていなくてもエラーが表示されます。

@SkipValidationで注釈を使用しようとしましたexecute()が、これにより、フォームの送信後でもエラーがまったく表示されなくなります。

4

3 に答える 3

7

@SkipValidationを使用して、LoginAction クラスにもう 1 つのメソッドを追加して、入力の login.jsp を返すことができます。

LoginAction.java

     public String execute()
        {       
             if (//username and password correct) {
               return SUCCESS; //redirect to forums page
             } else {
             return LOGIN;
              }     
        }

    public void validate()
     {
             //validation rule
              addActionError("Error message");
     }


    @SkipValidation
    public String loginForm()
     {
            return INPUT;
     }

これで、検証は execute メソッドでのみ行われます。まず、loginForm メソッドにリクエストが来ます。これを行うには、構成を少し変更します。

struts.xml

<action name="login_*" class="community.action.LoginAction"  method="{1}">
    <result name="success" type="redirect">/forums/list</result>
    <result name="login">/WEB-INF/login.jsp</result>
    <result name="input">/WEB-INF/login.jsp</result> </action>

ここで、action 要素の method="{1}" エントリを使用して、要求されたメソッドを確認します。要求で何も指定されていない場合は、execute() メソッドが呼び出されます。それ以外の場合は、前述のメソッドが呼び出されます。アクションに注意してください。名前が login_* に変更されました

JSP でメソッド名を指定するには:


  -------
  <s:submit name="SubmitButton" value="Click To Login" action="login_loginForm"/>


上記の送信 UI 要素では、アクションは login_loginForm として言及されています。ここで login_ はアクション名を参照し、loginForm は呼び出されるメソッドを参照します。これが役立つことを願っています

于 2012-10-24T09:57:52.177 に答える
2

別のアクション名を使用する必要があります。1つはフォームを表示するためのもので、もう1つは送信するためのものです。

于 2012-10-24T09:06:13.293 に答える
1

つまり、最初のページの読み込み中にアクションをすでに呼び出しています。これを修正する最も簡単な方法は、アクションの名前をloginからloginActionまたは他の名前に変更することです。

于 2012-10-24T09:01:33.337 に答える