Struts2 没有为与上下文路径关联的命名空间 [/] 和操作名称 [索引] 映射操作

问题描述 投票:0回答:1

这个问题之前已经被问过很多次了,但和这个不太一样。一切似乎都在正确的位置上。我正在使用 Java8、Eclipse、Maven、Struts2 以及 Convention Plugin、Spring、Tiles 和注释。上下文根是相等的,仅供参考。

  • 正在读取 struts.xml,因为我在配置浏览器中看到了正确的常量
    • struts.convention.default.parent.package=convention-json-tiles
  • convention-json-tiles 扩展了 struts-default
  • web.xml 有
    • 正确的“actionPackages”值
    • 欢迎文件=index.action
    • filter-class=org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
  • WAR 文件在actionPackages 包中具有正确的.class 文件

我正在使用的 jar 文件:

  • struts2-config-browser-plugin 2.5.29
  • struts2-约定插件 2.5.29
  • struts2-core 2.5.29
  • struts2-javatemplates-插件 2.5.29
  • struts2-json-插件2.5.29
  • struts2-spring-插件 2.5.29
  • struts2-tiles-插件 2.5.29
  • spring-orm 4.3.26.RELEASE
  • spring-tx 4.3.26.RELEASE

我在日志中看到的唯一错误是:

  • org.apache.struts2.dispatcher.Dispatcher - 找不到操作或结果:/iquality
  • 没有映射操作名称的操作。

这是我拥有的标准 Action 类。

package com.icumed.ifactory.qa.web.actions;

public class ElementsAction extends ActionSupport
{
  @Action(value = "/elements-page", results =
  {
    @Result(name = "success", type = "tiles", location = "elements")
  })
  public String execute()
  {
    return SUCCESS;
  }

  @Action(value = "/element", results =
  {
    @Result(name = "success", type = "tiles", location = "element")
  })
  public String getElement() throws ApplicationException
  {
    return super.get();
  }

  @Action(value = "/elements", results =
  {
    @Result(name = "success", type = "json", params =
    {
      "root",
      ROOT_ELEMENT_TAG,
      "excludeNullProperties",
      "false",
    })
  })
  public String search() throws ApplicationException
  {
    return super.search();
  }
}

这是我完整的

struts.xml

<struts>
  <constant name="struts.custom.i18n.resources" value="iquality_messages" />
  <constant name="struts.ui.theme" value="xhtml" />
  <constant name="struts.multipart.enabled" value="true" />
  <constant name="struts.json.dateformat" value="EEE, dd MMM yyyy HH:mm:ss zzz" />
  <constant name="struts.objectFactory" value="spring" /> 
  <constant name="struts.convention.action.includeJars" value=".*?/ifactory.*?jar(!/)?" />
  <constant name="struts.convention.exclude.parentClassLoader" value="true" />
  <constant name="struts.convention.action.fileProtocols"      value="jar,file,zip,vfs,vfsfile,vfszip" />
  <constant name="struts.convention.default.parent.package" value="convention-json-tiles" />

  <package name="convention-json-tiles" namespace="/" extends="struts-default">
    <result-types>
      <result-type name="json" class="org.apache.struts2.json.JSONResult" />
      <result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult" />
    </result-types>

    <default-interceptor-ref name="defaultStack" />

    <global-results>
      <result name="Exception">/WEB-INF/content/application_exception.jsp</result>
    </global-results>

    <global-exception-mappings>
      <exception-mapping exception="java.lang.Exception" result="Exception" />
    </global-exception-mappings>
  </package>
</struts>

我错过了什么或者我做错了什么?

java struts2 struts2-convention-plugin struts2-config-browser
1个回答
0
投票

这是一个 WebLogic 问题。我正在使用 WebLogic 12.1.3,并且必须将以下内容添加到 weblogic.xml

  <wls:container-descriptor>
    <wls:prefer-application-packages>
      <wls:package-name>org.objectweb.asm.*</wls:package-name>
      <wls:package-name>org.springframework.web.servlet.*</wls:package-name>
      <wls:package-name>org.springframework.web.*</wls:package-name>
      <wls:package-name>org.hibernate.validator.*</wls:package-name>
      <wls:package-name>javax.validation.*</wls:package-name>
      <wls:package-name>javax.validation.spi.*</wls:package-name>
      <wls:package-name>javassist.util.proxy..*</wls:package-name>
    </wls:prefer-application-packages>

    <wls:show-archived-real-path-enabled>true</wls:show-archived-real-path-enabled>
  </wls:container-descriptor>
© www.soinside.com 2019 - 2024. All rights reserved.