3

DispatcherListenerStruts2 にはインターフェースがあります。ドキュメントによると

init「上で コードを実行したい人にタグを付けるためのインターフェースdestroyDispatcher

しかし、このインターフェースの使い方。このインターフェースを実装するクラスを作成する場合、どのように Struts2 に設定すればよいですか?

4

2 に答える 2

2

がインスタンス化されるDispatcherと、初期化または破棄されたときにリスナーに通知を送信できます。参考資料とコードサンプルはこちらから。

bean簡単な使用法は、タグを介してコンテナーによって Bean をインスタンス化し、initメソッドに自分自身を追加し、ClasspathConfigurationProvider.

コードはアイデアを示すためだけのものです

struts.xml:

<bean type="com.opensymphony.xwork2.config.PackageProvider" name="myBean" class="jspbean.struts.MyBean" />

MyBean.java:

public class MyBean implements ConfigurationProvider, DispatcherListener {
  public MyBean() {
    System.out.println("!!! MyBean !!!");
  }

  @Override
  public void dispatcherInitialized(Dispatcher du) {
    System.out.println("!!! dispatcherInitialized !!!");
  }

  @Override
  public void dispatcherDestroyed(Dispatcher du) {
    System.out.println("!!! dispatcherDestroyed !!!");
  }

  @Override
  public void destroy() {
    System.out.println("!!! destroy !!!");
    Dispatcher.removeDispatcherListener(this);
  }

  @Override
  public void init(Configuration configuration) throws ConfigurationException {
    System.out.println("!!! init !!!");
    Dispatcher.addDispatcherListener(this);
  }

  @Override
  public boolean needsReload() {
    return false;
  }

  @Override
  public void loadPackages() throws ConfigurationException {

  }

  @Override
  public void register(ContainerBuilder builder, LocatableProperties props) throws ConfigurationException {

  }
}

出力:

15:27:50  INFO (org.apache.struts2.spring.StrutsSpringObjectFactory:42) - ... initialized Struts-Spring integration successfully
!!! MyBean !!!
!!! init !!!
jul 18, 2013 3:27:51 PM org.apache.catalina.startup.HostConfig deployDirectory
!!! dispatcherInitialized !!!
[2013-07-18 06:28:11,102] Artifact jspbean:war exploded: Artifact is deployed successfully
INFO: A valid shutdown command was received via the shutdown port. Stopping the Server instance.
INFO: Stopping service Catalina
!!! dispatcherDestroyed !!!
于 2013-07-17T13:15:07.877 に答える
1

Spring を使用している場合は、リスナーの Bean を作成し、コンストラクターでそれをdispatcherListenersリストに追加できます。

public YourDispatcherListener () {
  Dispatcher.addDispatcherListener(this);
}

別の解決策はServletContextListener、ディスパッチャーリスナーを作成してリストに追加することです。

于 2013-07-17T13:31:59.120 に答える