0

ストラットアクションをインターセプトするためにSAIFプラグインを統合しようとしています。私はhttp://struts.sourceforge.net/saif/index.htmlから学びます

私はこのような構成を書きました:struts-config.xml

<plug-in className="net.sf.struts.saif.SAIFPlugin">
    <set-property property="interceptor-config" value="/WEB-INF/interceptor-config.xml" />
</plug-in>

インターセプター-config.xml

<interceptor-config>
 <interceptor name="componentInterceptor" type="net.sf.struts.saif.ComponentInterceptor"/>
 <interceptor name="testInterceptor" type="net.sf.struts.saif.TestInterceptor"/>

 <default-interceptors>
  <interceptor name="componentInterceptor"/>
 </default-interceptors>

 <action type="org.apache.struts.webapp.example.EditRegistrationAction">
  <interceptor name="testInterceptor"/>
 </action>
</interceptor-config> 

次のようなエラーが発生しました:

javax.servlet.UnavailableException: Specified RequestProcessor not compatible with saif.
    at org.apache.struts.action.ActionServlet.init(ActionServlet.java:402)
    at javax.servlet.GenericServlet.init(GenericServlet.java:212)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1139)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:966)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3996)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4266)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:736)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
    at org.apache.catalina.core.StandardService.start(StandardService.java:448)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:700)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:552)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)

この問題を解決するのを手伝ってもらえますか?

4

2 に答える 2

1

Strutsユーザー メーリング リストからのこのメッセージを引用します。

リクエスト プロセッサが異なるため、SAIF がデフォルトの S1.3 構成で動作する可能性は低いです。アプリケーションが古いリクエスト プロセッサに依存していない場合は、古いリクエスト プロセッサを使用してみてください。

AFAICT SAIF は、標準の (古い) リクエスト プロセッサ以外では動作しませんが、ハックして動作するようにすることは可能かもしれません。

于 2010-10-25T02:26:41.840 に答える
1

これまで Struts アクション呼び出しフレームワークを使用したことはありませんが、Tiles の例外メッセージはよく知っています。Tiles は次のようなメッセージをスローします: メッセージSpecified RequestProcessor not compatible with TilesRequestProcessorの親しみやすさ (あなたの場合Specified RequestProcessor not compatible with saif) に加えて、原因が同じである可能性もあると思います。

これは、Tiles プラグインでこれを修正する記事です。あなたを助けるかもしれません。

Struts サーブレットが初期化されると、すべてのプラグインが初期化されます。メッセージはプラグインの init メソッドから送信される必要があり、それが Tiles と同じである場合は、Class.isAssignableFromを使用したテストが原因である必要があります。

EDIT: SAIFプラグインのソースコードを調べたところ、次のものが見つかりました:

protected void initRequestProcessorClass(ActionServlet servlet, ModuleConfig config) throws ServletException {
  .........
  .........
  ControllerConfig ctrlConfig = config.getControllerConfig();
  String configProcessorClassname = ctrlConfig.getProcessorClass();
  .........
  .........
  // Check if specified request processor is compatible with saif.
  try {
    Class saifProcessorClass = SAIFRequestProcessor.class;
    Class saifTilesProcessorClass = SAIFTilesRequestProcessor.class;
    Class configProcessorClass = Class.forName(configProcessorClassname);
    if (!saifProcessorClass.isAssignableFrom(configProcessorClass)
       && !saifTilesProcessorClass.isAssignableFrom(configProcessorClass)) {
      String msg = "Specified RequestProcessor not compatible with saif.";
      throw new ServletException(msg);
    }
  } catch (Exception ex) {
    throw new ServletException(ex);
  } 
  .........
  .........
}

Tiles プラグインと同じように見えるので、私が示した記事に答えが含まれています。

于 2010-10-24T13:58:18.440 に答える