代码之家  ›  专栏  ›  技术社区  ›  Adi Sembiring

Struts 1.3的Struts动作调用框架

  •  0
  • Adi Sembiring  · 技术社区  · 14 年前

    http://struts.sourceforge.net/saif/index.html

    我编写了如下配置: 配置方法

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

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

    你能帮我解决这个问题吗?

    2 回复  |  直到 14 年前
        1
  •  1
  •   Pascal Thivent    14 年前

    引用 this message 从struts用户邮件列表中:

    使用默认的S1.3配置,因为 请求处理器不同——您 处理器如果你的应用程序没有

    阿法克·赛义夫不会和 标准以外的任何东西(旧的) 请求处理器,但它可能是 有可能把它砍掉。

        2
  •  1
  •   user159088 user159088    14 年前

    我以前没有使用过Struts操作调用框架,但是Tiles中的异常消息对我来说很熟悉。Tiles抛出这样的消息: Specified RequestProcessor not compatible with TilesRequestProcessor 所以我认为除了信息的熟悉性之外 Specified RequestProcessor not compatible with saif

    这是一个 article

    当Struts Servlet初始化时,它会初始化所有插件。消息应该来自插件的init方法,如果它与Tiles相同,则使用 Class.isAssignableFrom

    编辑:

    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插件相同,所以我指出的文章包含了答案。