1

searchUser()メソッドを持つstruts Action Classがあり、このメソッドを呼び出したいと思います。だから私はstruts.xmlで次の構成を持っています

<action name="searchUser" method="searchUser" class="test.User">
<interceptor-ref name="validation">
    <param name="excludeMethods">searchUser</param>
</interceptor-ref>
<result name="success">/jsp/userAdded.jsp</result>
<result name="input">/jsp/user.jsp</result>
<result name="error">/jsp/error.jsp</result>
</action>

私のtest.User.javaクラス

public class UserAction extends ActionSupport{
  String loginId;
  //getter and setter method for loginId;

public String searchUser(){
   System.out.println(getLoginId());
   return SUCCESS;
}

}

URL:/app/searchUser.action?loginId=1を使用してこのアクションにアクセスしようとすると、理解できるようにコンソールに「1」が表示されますが、nullが表示されます。ストラットフォームからではなく、URLからアクションにアクセスしたい。

検証インターセプターを削除すると、「1」が表示されます。検証をスキップしたいので、検証なしで値「1」を取得する方法を教えてください。他の方法はありますか。検証を使用せずにリクエストパラメータを設定したい。

4

3 に答える 3

2

これは、検証インターセプターの動作自体とは関係ありません。でアクションを構成することにより

<action name="searchUser" method="searchUser" class="test.User">
<interceptor-ref name="validation">
    <param name="excludeMethods">searchUser</param>
</interceptor-ref>
<result name="success">/jsp/userAdded.jsp</result>
<result name="input">/jsp/user.jsp</result>
<result name="error">/jsp/error.jsp</result>
</action>

ストラットに検証インターセプターを使用するように指示しましたが、このアクションには検証インターセプターのみを使用します。したがって、HttpResponse パラメーターをアクションに渡すパラメーター インターセプターを含め、他のすべてのインターセプターは無視されます。

構成から検証インターセプターを削除すると、Struts はデフォルトのスタックを使用します。パラメーター インターセプターが再度呼び出され、HttpResponses がアクションに返されます。

ここで実際に何を達成しようとしていますか?

于 2012-10-24T08:25:59.137 に答える
2

アクションで実行する代わりに、デフォルト パッケージの構成を変更することもできます。

<package name="default" extends="struts-default">
    <interceptors>
        <interceptor-stack name="defaultStack">
            <interceptor-ref name="exception" />
            <interceptor-ref name="alias" />
            <interceptor-ref name="servletConfig" />
            <interceptor-ref name="prepare" />
            <interceptor-ref name="i18n" />
            <interceptor-ref name="chain" />
            <interceptor-ref name="modelDriven" />
            <interceptor-ref name="fileUpload" />
            <interceptor-ref name="staticParams" />
            <interceptor-ref name="params" />
            <interceptor-ref name="conversionError" />
            <interceptor-ref name="validation">
                <param name="excludeMethods">searchUser</param>
            </interceptor-ref>
            <interceptor-ref name="workflow" />
        </interceptor-stack>
    </interceptors>
    ....
<package />

そこでは、いくつかのアクションを構成でき、* 記号を使用できます。例えば:

<param name="excludeMethods">search*, remove*</param>
于 2012-10-24T05:52:23.907 に答える
1

デフォルトのインターセプターは上書きされる可能性があります。これを試して:

<action name="searchUser" method="searchUser" class="test.User"> 
  <interceptor-ref name="defaultStack">
    <param name="validation.excludeMethods">searchUser</param>
  </interceptor-ref>
  <result>...</result>
</action>
于 2012-10-24T04:09:53.537 に答える