0

デフォルトでは、struts2 アプリをアクションに転送する必要があります。

<?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>

    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="false" />

    <package name="myApp" namespace="/myApp" extends="struts-default">


        <action name="Login_*" method="{1}" class="myApp.SessionManager">
            <result name="input">/myApp/Login.jsp</result>
            <result type="redirectAction">Menu</result>     
        </action>

    </package>

    <package name="default" namespace="/" extends="struts-default">
        <default-action-ref name="index" />
        <action name="index">
            <result type="redirectAction">
                <param name="actionName">Login_input.action</param>
                <param name="namespace">/myApp</param>
            </result>
        </action>
    </package>


</struts>

SessionManager.input() を呼び出すアプリケーションを探していますが、代わりに SessionManager.execute() を呼び出します。

4

3 に答える 3

1

通常、public input()メソッドは必要ありません。アクションの最も基本的で典型的なシナリオは次のとおりです。

  • アクションは「何かをする」(1つのこと)ことを目的としており、このアクションにはユーザー入力が必要です。
  • アクションは、 execute()メソッド内の何かよりも実行します
  • アクションがその何かを成功させた場合、それは成功を返します。これにより、有益な結果のJSPページがトリガーされます。
  • アクションがユーザー入力を取得しなかった場合(何もなかったため、または不十分または間違っていたため)、INPUTを返します。これにより、「入力フォーム」JSPがトリガーされ、ユーザーはデータを入力してアクションを(再)試行できます。

現在、この基本的なシナリオは、次のようないくつかの方法でコーディングできます。

1)2つの異なるマッピング。1つは入力フォーム用、もう1つは実行用です。

<!-- default action class: execute does nothing, returns SUCCES -->
<action name="ActionXXXShowForm"> 
                <result>/myApp/XXXForm.jsp</result>
</action>

<action name="ActionXXX" class="myApp.XXXAction"> 
                <result name="input">/myApp/XXXForm.jsp</result>
                <result>/myApp/XXXDone.jsp</result>
</action>

2)1つのマッピングのみ

<action name="ActionXXX"  class="myApp.XXXAction"> 
                <result name="input">/myApp/XXXForm.jsp</result>
                <result>/myApp/XXXDone.jsp</result>
</action>

どちらも非常に似ています(特にプログラムによる検証を行っている場合)。どちらの場合も、アクション( execute )には「struts」メソッドしかありません。これは、アクションが「1つのことを行う」だけなので良い習慣です。ただし、2番目のケースでは、データが投稿されていないケースに対処する必要があり、その場合はエラーメッセージを出力しません。

例:ケース1の場合:

public class XXXAction extends ActionSupport {
    ...    
    public String execute() throws Exception {
        if(! inputOk()) return INPUT;
         // .. do your stuff
        return SUCCESS;
    }

    private boolean inputOk() {
       // ... check your inputs - sort of programatic validation
       if( surname == null ) addActionError("no surname");
       // .... more checks
       return ! hasActionErrors());
    }

}

ケース2では、少し変更します。

public class XXXAction extends ActionSupport {
    ....    
    public String execute() throws Exception {
        if( emptyInput() ) return INPUT;  // no error messages in this case
        if(! inputOk()) return INPUT;
         // .. do your stuff
        return SUCCESS;
    }

    private boolean inputOk() {
       // same as before
    }

    private boolean emptyInput() {
       // detect no input was sent. do not emit errors herer
    }
}
于 2010-03-30T16:21:45.890 に答える
0

タグを使用している場合<s:a...、デフォルトのexecute()メソッド以外の目的のメソッドを呼び出すことはできません。タグの代わりに、ID<s:a...を持つタグを使用してアクションを定義し、<s:url...通常のhtmlアンカータグを使用して同じものを呼び出す必要があります。 <a href=${<<id>>}ただし、struts.xmlまたはその他のxml構成ファイルでメソッドを指定する必要がある場合があります。句のmethod属性とともにstruts.xmlファイルに含まれています<action... method="..."

于 2009-12-29T09:23:04.340 に答える
0

jsp からアクションを呼び出す場合、デフォルトのメソッドは execute() です。別のメソッドを呼び出したい場合は、属性 method="" で指定できます。

<s:url action="SessionManager" method="input"/>

属性メソッドは他のタグと共通です。

于 2009-12-08T14:53:47.003 に答える