138

当尝试像这样在 EL 中引用托管 bean 时#{bean.entity.property},有时会javax.el.PropertyNotFoundException: Target Unreachable抛出异常,通常是在要设置 bean 属性或要调用 bean 操作时。

似乎有五种不同的消息:

  1. 目标不可达,标识符“bean”解析为空
  2. 目标不可达,“实体”返回 null
  3. 目标不可达,'null' 返回 null
  4. 目标不可达,''0'' 返回 null
  5. 目标不可达,'BracketSuffix' 返回 null

它们都是什么意思?它们是如何引起的,应该如何解决?

4

18 回答 18

261

1. 目标不可达,标识符“bean”解析为空

这归结为托管 bean 实例本身无法通过 EL 中的标识符(托管 bean 名称)找到,就像这样#{bean}

确定原因可以分为三个步骤:

一种。谁在管理豆子?
湾。什么是(默认)托管 bean 名称?
C。支持 bean 类在哪里?

1a。谁在管理豆子?

第一步是检查哪个 bean 管理框架负责管理 bean 实例。是通过CDI@Named吗?还是JSF via @ManagedBean?或者是Spring via @Component?你能确保你没有在同一个支持 bean 类上混合多个 bean 管理框架特定的注释吗?例如@Named @ManagedBean,@Named @Component@ManagedBean @Component. 这是错误的。bean 必须由最多一个 bean 管理框架管理,并且该框架必须正确配置。如果您已经不知道该选择哪个,请前往Backing bean (@ManagedBean) 或 CDI Beans (@Named)?Spring JSF 集成:如何在 JSF 托管 bean 中注入 Spring 组件/服务?

如果是CDI通过 管理 bean @Named,那么您需要确保以下内容:

  • CDI 1.0 (Java EE 6) 需要一个/WEB-INF/beans.xml文件才能在 WAR 中启用 CDI。它可以是的,也可以只有以下内容:

      <?xml version="1.0" encoding="UTF-8"?>
      <beans xmlns="http://java.sun.com/xml/ns/javaee" 
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                                 http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
      </beans>
    
  • CDI 1.1 (Java EE 7)没有任何beans.xml. 或空beans.xml文件,或与上述 CDI 1.0 兼容,其beans.xml行为与 CDI 1.0 相同。当有一个beans.xml与显式兼容的 CDI 1.1version="1.1"时,默认情况下它只会注册具有@Named显式 CDI 范围注释的bean ,例如, , ,等。如果您打算将所有 bean 注册为 CDI 托管 bean,即使是那些没有显式CDI 范围,使用下面的 CDI 1.1 兼容set (默认为)。@RequestScoped@ViewScoped@SessionScoped@ApplicationScoped/WEB-INF/beans.xmlbean-discovery-mode="all"bean-discovery-mode="annotated"

      <?xml version="1.0" encoding="UTF-8"?>
      <beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
                                 http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
             version="1.1" bean-discovery-mode="all">
      </beans>
    
  • 将 CDI 1.1+ 与bean-discovery-mode="annotated"(默认)一起使用时,请确保您没有意外导入 JSF 范围,例如javax.faces.bean.RequestScoped而不是 CDI 范围javax.enterprise.context.RequestScoped。注意 IDE 自动完成功能。

  • 当使用 Mojarra 2.3.0-2.3.2 和 CDI 1.1+ bean-discovery-mode="annotated"(默认)时,由于存在错误,您需要将 Mojarra 升级到 2.3.3 或更高版本。如果您无法升级,那么您需要设置bean-discovery-mode="all"inbeans.xml或将 JSF 2.3 特定@FacesConfig注释放在 WAR 中的任意类上(通常是某种应用程序范围的启动类)。

  • 在声明符合 Servlet 4.0 的 Servlet 4.0 容器上使用 JSF 2.3 时web.xml,您需要显式地将 JSF 2.3 特定@FacesConfig注释放在 WAR 中的任意类上(通常是某种应用程序范围的启动类)。这在 Servlet 3.x 中不是必需的。

  • 使用 CDI 3.0 时,第一个版本的包重命名为javax.*jakarta.*,那么您需要确保所有部署描述符文件beans.xmlweb.xmlfaces-config.xml符合jakartaee模式,因此不符合旧javaee模式。

      <?xml version="1.0" encoding="UTF-8"?>
      <beans xmlns="https://jakarta.ee/xml/ns/jakartaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee 
                                 https://jakarta.ee/xml/ns/jakartaee/beans_3_0.xsd"
             version="3.0" bean-discovery-mode="all">
      </beans>
    
  • Tomcat 和 Jetty 等非 JEE 容器不附带 CDI。您需要手动安装它。这比仅添加库 JAR 需要更多的工作。对于 Tomcat,请确保遵循此答案中的说明:如何在 Tomcat 上安装和使用 CDI?

  • 您的运行时类路径是干净的,并且在与 CDI API 相关的 JAR 中没有重复项。确保您没有混合多个 CDI 实现(Weld、OpenWebBeans 等)。当目标容器已经捆绑了 CDI API 时,请确保不要在 webapp 中提供另一个 CDI 甚至 Java EE API JAR 文件。

  • 如果您在 JAR 中为 JSF 视图打包 CDI 托管 bean,那么请确保 JAR 至少有一个有效的/META-INF/beans.xml(可以保持为空)。


如果JSF通过自 2.3 deprecated 管理 bean @ManagedBean,并且您无法迁移到 CDI,则需要确保以下内容:

  • faces-config.xml声明与 JSF 2.0 兼容。所以 XSD 文件和version必须至少指定 JSF 2.0 或更高版本,因此不是 1.x。

      <faces-config
          xmlns="http://java.sun.com/xml/ns/javaee"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
          version="2.0">
    

    对于 JSF 2.1,只需分别替换2_0和和2.02_12.1

    如果您使用的是 JSF 2.2 或更高版本,请确保您使用的是xmlns.jcp.org名称空间而不是java.sun.com所有地方。

      <faces-config
          xmlns="http://xmlns.jcp.org/xml/ns/javaee"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd"
          version="2.2">
    

    对于 JSF 2.3,只需分别替换2_2和和2.22_32.3

  • 您没有意外地导入javax.annotation.ManagedBean而不是javax.faces.bean.ManagedBean. 注意 IDE 自动完成功能,众所周知,Eclipse 会自动建议错误的一个作为列表中的第一项。

  • 您没有在同一个支持 bean 类以及不同的托管 bean 名称中覆盖@ManagedBean由 JSF 1.x 样式<managed-bean>条目。faces-config.xml这一项将优先于@ManagedBeanfaces-config.xml从 JSF 2.0 开始,不需要在其中注册托管 bean ,只需将其删除即可。

  • 您的运行时类路径是干净的,并且在与 JSF API 相关的 JAR 中没有重复项。确保您没有混合多个 JSF 实现(Mojarra 和 MyFaces)。当目标容器已经捆绑了 JSF API 时,请确保不要在 webapp 中提供另一个 JSF 甚至 Java EE API JAR 文件。有关JSF 安装说明,另请参阅我们 JSF wiki 页面的“安装 JSF”部分。如果您打算从 WAR 而非容器本身升级容器捆绑的 JSF,请确保您已指示目标容器使用 WAR 捆绑的 JSF API/impl。

  • 如果您将 JSF 托管 bean 打包到 JAR 中,请确保 JAR 至少具有 JSF 2.0 兼容的/META-INF/faces-config.xml. 另请参阅如何引用 JAR 文件中提供的 JSF 托管 bean?

  • 如果您实际使用的是侏罗纪 JSF 1.x,并且无法升级,那么您需要通过<managed-bean>infaces-config.xml而不是@ManagedBean. 不要忘记修复您的项目构建路径,使您不再拥有 JSF 2.x 库(这样@ManagedBean注释就不会成功编译而令人困惑)。


如果是Spring通过 管理 bean @Component,那么您需要确保以下几点:

  • Spring 正在按照其文档进行安装和集成。重要的是,您至少需要将其包含在web.xml

      <listener>
          <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
      </listener>
    

    这在faces-config.xml

      <application>
          <el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver>
      </application>
    
  • (以上是我对 Spring 的所有了解——我不做 Spring——随意编辑/评论其他可能的 Spring 相关原因;例如一些 XML 配置相关的问题)


如果它是通过其属性(例如,,,等)管理(嵌套)bean的中继器组件,并且您实际上得到了“目标无法访问,标识符 'item' 解析为 null”,那么您需要确保以下内容:var<h:dataTable var="item"><ui:repeat var="item"><p:tabView var="item">

  • #{item}没有在binding任何子组件的属性中引用。这是不正确的,因为binding属性在视图构建期间运行,而不是在视图渲染期间运行。此外,在组件树中实际上只有一个组件在每一轮迭代中都可以简单地重用。换句话说,您实际上应该使用binding="#{bean.component}"而不是binding="#{item.component}". 但更好的是完全摆脱组件绑定到 bean 并调查/询问您认为以这种方式解决的问题的正确方法。另请参阅JSF 中的“绑定”属性如何工作?何时以及如何使用它?


1b。什么是(默认)托管 bean 名称?

第二步是检查注册的托管 bean 名称。JSF 和 Spring 使用约定符合JavaBeans 规范,而 CDI 有例外,具体取决于 CDI impl/version。

  • 像下面这样的FooBean支持 bean 类,

      @Named
      public class FooBean {}
    

    #{fooBean}根据 JavaBeans 规范,所有 bean 管理框架都会有一个默认的托管 bean 名称。

  • 像下面这样的FOOBean支持 bean 类,

      @Named
      public class FOOBean {}
    

    在 JSF 和 Spring 中,其非限定类名至少以两个大写字母开头将具有与非限定类名完全相同的默认托管 bean 名称#{FOOBean},也符合 JavaBeans 规范。在 CDI 中,在 2015 年 6 月之前发布的 Weld 版本中也是如此,但在 2015 年 6 月之后发布的 Weld 版本 (2.2.14/2.3.0.B1/3.0.0.A9) 和 OpenWebBeans 中都不是这种情况,因为CDI规范 在那些 Weld 版本和所有 OWB 版本中,它只是第一个字符小写#{fOOBean}

  • 如果您已显式指定托管 bean 名称foo,如下所示,

      @Named("foo")
      public class FooBean {}
    

    or 等价于@ManagedBean(name="foo")or @Component("foo"),那么它只能由 使用#{foo},因此不能由 使用#{fooBean}


1c。支持 bean 类在哪里?

第三步是仔细检查支持 bean 类是否在构建和部署的 WAR 文件中的正确位置。确保您已正确执行项目和服务器的完全清理、重建、重新部署和重新启动,以防您实际上正忙于编写代码并在浏览器中不耐烦地按 F5。如果仍然无效,让构建系统生成一个 WAR 文件,然后使用 ZIP 工具提取和检查该文件。.class支持 bean 类的编译文件必须驻留在其包结构中/WEB-INF/classes。或者,当它被打包为 JAR 模块的一部分时,包含已编译.class文件的 JAR 必须驻留在/WEB-INF/lib而不是例如 EAR/lib或其他地方。

如果您使用的是 Eclipse,请确保支持 bean 类是 insrc不是 WebContent,并确保Project > Build Automatically已启用。如果您使用的是 Maven,请确保支持 bean 类在 in 中,src/main/java因此不在src/main/resourcesor中src/main/webapp

如果您使用 EJB+WAR(s) 将 Web 应用程序打包为 EAR 的一部分,那么您需要确保支持 bean 类在 WAR 模块中,因此不在 EAR 模块或 EJB 模块中。业务层 (EJB) 必须没有任何与 Web 层 (WAR) 相关的工件,以便业务层可跨多个不同的 Web 层(JSF、JAX-RS、JSP/Servlet 等)重用。


2.目标不可达,'实体'返回null

这归结为返回的嵌套属性。这通常仅在 JSF 需要通过如下所示的输入组件设置值时才会公开,而实际返回的.entity#{bean.entity.property}nullproperty#{bean.entity}null

<h:inputText value="#{bean.entity.property}" />

您需要确保事先在@PostConstruct、 或<f:viewAction>方法中准备好模型实体,或者可能是add()操作方法,以防您在同一视图上使用 CRUD 列表和/或对话框。

@Named
@ViewScoped
public class Bean {

    private Entity entity; // +getter (setter is not necessary).

    @Inject
    private EntityService entityService;

    @PostConstruct
    public void init() {
        // In case you're updating an existing entity.
        entity = entityService.getById(entityId);

        // Or in case you want to create a new entity.
        entity = new Entity();
    }

    // ...
}

至于重要性@PostConstruct;如果您使用的是使用代理的 bean 管理框架,例如 CDI,那么在常规构造函数中执行此操作将失败。始终用于@PostConstruct挂钩托管 bean 实例初始化(并用于@PreDestroy挂钩托管 bean 实例销毁)。此外,在构造函数中,您还无法访问任何注入的依赖项,另请参阅NullPointerException 在尝试访问构造函数中的 @Inject bean 时

如果entityId是通过 提供的<f:viewParam>,您需要使用<f:viewAction>而不是@PostConstruct. 另请参阅何时使用 f:viewAction / preRenderView 与 PostConstruct?

您还需要确保null在回发期间保留非模型,以防您仅在add()操作方法中创建它。最简单的方法是将 bean 放在视图范围内。另请参阅如何选择正确的 bean 范围?


3.目标不可达,'null'返回null

这实际上与 #2 的原因相同,只是使用的(较旧的)EL 实现在保留要在异常消息中显示的属性名称方面有些错误,最终错误地暴露为“null”。当你有很多像这样的嵌套属性时,这只会使调试和修复变得更加困难#{bean.entity.subentity.subsubentity.property}

解决方案仍然相同:确保所讨论的嵌套实体不是null, 在所有级别。


4.目标不可达,''0''返回null

这也与 #2 有相同的原因,只有正在使用的(较旧的)EL 实现在制定异常消息时存在错误。仅当您[]在 EL 中使用大括号表示法时才公开,#{bean.collection[index]}因为#{bean.collection}它本身是非空的,但指定索引处的项目不存在。然后必须将此类消息解释为:

目标不可达,'collection[0]' 返回 null

解决方法也和#2一样:确保集合项可用。


5.目标不可达,'BracketSuffix'返回null

这实际上与 #4 的原因相同,只是使用的(较旧的)EL 实现在保留迭代索引以显示在异常消息中有些错误,最终错误地暴露为 'BracketSuffix' 这实际上是字符]。当您在集合中有多个项目时,这只会使调试和修复变得更加困难。


其他可能的原因javax.el.PropertyNotFoundException

于 2015-05-08T16:15:02.090 回答
7

对于那些仍然被困的人...

使用带有 CDI 的 NetBeans 8.1 和 GlassFish 4.1,由于某种原因,我只在本地遇到了这个问题,而不是在远程服务器上。有什么诀窍:

-> 使用 javaee-web-api 7.0 而不是 NetBeans 提供的默认 pom 版本,即 javaee-web-api 6.0,所以:

<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-web-api</artifactId>
    <version>7.0</version>
    <scope>provided</scope>
    <type>jar</type>
</dependency>

-> 将此 javaee-web-api-7.0.jar 作为 lib 上传到服务器(domain1 文件夹中的 lib 文件夹)并重新启动服务器。

于 2016-02-04T00:08:51.030 回答
2

在自己解决了这个错误后,我决定分享我对这个错误的发现。

首先,应该认真对待 BalusC 解决方案,但是 Netbeans 中还有另一个可能的问题需要注意,尤其是在使用 Maven构建企业应用程序项目 (EAR)时。

Netbeans 生成一个父 POM 文件、一个EAR 项目、一个EJB 项目和一个WAR 项目。我项目中的其他一切都很好,我几乎认为问题可能是 GlassFish 4.0 中的一个错误(我必须安装并将其插入 Netbeans),因为 GlassFish 4.1 有一个 Weld CDI 错误,这使得 Netbeans 8.0 中嵌入了 GlassFish 4.1。 2 无法使用,除非通过补丁。

解决方案:

要解决“目标无法访问,标识符 'bean' 解析为空” 错误-

I 右键单击​​父 POM 项目,然后选择Properties。出现项目属性对话框,单击“Sources”,您会惊讶地看到“ Source/Binary Format ”设置为 1.5,“ Encoding ”设置为 Windows 1250。将“ Source/Binary Format ”更改为 1.6 0r 1.7,无论哪个您更喜欢使您的项目符合 CDI 标准,并且“编码”为 UTF-8。

如果所有其他子项目(EAR、EJB、WAR)尚不兼容,则对它们执行相同操作。运行您的项目,您将不会再遇到该错误。

我希望这可以帮助有类似错误的人。

于 2017-07-07T11:49:14.983 回答
2

我决定分享我的解决方案,因为尽管这里提供的许多答案很有帮助,但我仍然遇到了这个问题。在我的情况下,我在我的新项目中使用 JSF 2.3、jdk10、jee8、cdi 2.0,并且我确实在 wildfly 12 上运行了我的应用程序,使用参数 Standalone.sh -Dee8.preview.mode=true 启动服务器,正如 Wildfly 网站上所推荐的那样. 下载wildfly 13后“bean解析为null”的问题消失了。将完全相同的war上传到wildfly 13就可以了。

于 2018-07-12T15:04:43.060 回答
1

我陷入了这个错误,因为在@SpringBootApplication我忘记指定控制器的包名称的类中。

这次我想更具体地指出 Spring 必须扫描哪些组件,而不是配置基本包。

是这样的:

@ComponentScan(basePackages = {"br.com.company.project.repository", "br.com.company.project.service"})

但正确的形式是其中之一:

@ComponentScan(basePackages = {"br.com.company.project.repository", "br.com.company.project.service", "br.com.company.project.controller"})

@ComponentScan(basePackages = {"br.com.company.project")

我决定分享我的解决方案,因为虽然正确答案非常全面,但它并没有涵盖这个(愚蠢的)错误:)

于 2019-11-17T11:37:54.417 回答
1

它也可能是 Mojarra 2.3 中的一个错误https://github.com/eclipse-ee4j/mojarra/issues/4734

于 2020-10-17T17:42:40.853 回答
0

在我的例子中,我在@Named("beanName") 中犯了一个拼写错误,它被认为是“beanName”,但我写了“beanNam”,例如。

于 2017-03-16T13:59:38.090 回答
0

我将 wildfly 10 用于 javaee 容器。我遇到了“目标无法访问,'实体'返回 null”的问题。感谢 BalusC 的建议,但解决方案中的我的问题得到了解释。不小心使用了“import com.sun.istack.logging.Logger;” 而不是“导入 org.jboss.logging.Logger;” 导致 CDI 实施 JSF EL。希望它有助于改进解决方案。

于 2017-04-23T09:30:53.357 回答
0

我有同样的问题。结果证明解决方案要简单得多。似乎数据表需要getter 形式的方法,即getSomeMethod(),而不仅仅是someMethod()。在我的数据表中,我调用的是 findResults。我将支持 bean 中的方法更改为 getFindResults() 并且它有效。

一个 commandButton 在没有 get 的情况下工作 find ,这只会使它更加混乱。

于 2017-05-10T16:52:36.830 回答
0

至于#2,就我而言,它在替换后神奇地复活了

<body>

标记

<h:body>

在完成了几个(说实话,更简单的)JSF 项目之后,我不记得现在做了什么不同的设置,而且我第一次遇到这种错误。我正在制作一个非常基本的登录页面(用户名、密码、用户 Bean...)并像往常一样设置一切。我发现的唯一区别是前面提到的标签。也许有人觉得这很有用。

于 2019-01-20T09:38:26.677 回答
0

就我而言,问题是我包含了一个带参数的构造函数,而不是带有 Inject 注释的空构造函数,就像这样。

@Inject public VisitorBean() {}

我只是在没有任何构造函数的情况下对其进行了测试,这似乎也可以。

于 2019-02-26T20:12:38.550 回答
0

1.主题(目标不可达,标识符'bean'解析为null);

我检查了@BalusC 和其他共享者的有价值的答案,但在我的场景中我超过了这个问题。在创建具有不同名称的新 xhtml 并创建具有不同名称的 bean 类之后,我将代码逐步写入(而不是复制粘贴)到新的 bean 类和新的 xhtml 文件中。

于 2019-05-30T10:27:21.527 回答
0

当我从 web.xml 文件中删除 AnnotationConfigWebApplicationContext 上下文参数时,这是工作

如果你有如下所示的参数,你必须从 web.xml 文件中删除它

<context-param>
    <param-name>contextClass</param-name>
    <param-value>
      org.springframework.web.context.support.AnnotationConfigWebApplicationContext
  </param-value>
</context-param> 
于 2020-02-13T11:24:57.983 回答
0

首先,我使用的是:Eclipse、Weblogic、CDI、JSF、PrimeFaces。如果你也是,也许我的解决方案可以帮助你。

就我而言,错误的原因是“Eclipse”上的一些设置。

检查这个:

  1. 右键单击“服务器”选项卡上的 Weblogic 服务器
  2. 选择“属性”
  3. 在新的属性小窗口中,展开“Weblogic”菜单
  4. 在“Weblogic”菜单中,单击“发布”选项
  5. 现在,在右侧,确保选中“发布为展开的存档”选项。

就我而言,我已经检查了“发布为虚拟应用程序”,因此,更改我解决了“目标无法访问”错误。

于 2021-10-19T13:08:58.333 回答
-1

使用旧样式的 JSF 您必须在 beans-config.xml文件(位于 WEB-INF 文件夹中)中定义托管 bean,并在web.xml文件中引用它,这样:

bean-config.xml

<managed-bean>
  <managed-bean-name>"the name by wich your backing bean will be referenced"</managed-bean-name>
  <managed-bean-class>"your backing bean fully qualified class name"</managed-bean-class>
  <managed-bean-scope>session</managed-bean-scope>    
</managed-bean>

(我尝试过使用其他范围,但是...)

web.xml

<context-param>
  <param-name>javax.faces.CONFIG_FILES</param-name>
  <param-value>"/WEB-INF/beans-config.xml</param-value>
</context-param>
于 2016-10-11T17:39:16.857 回答
-2

另一个线索:我使用的是 JSF,并添加了 mvn 依赖项:com.sun.faces jsf-api 2.2.11

    <dependency>
        <groupId>com.sun.faces</groupId>
        <artifactId>jsf-impl</artifactId>
        <version>2.2.11</version>
    </dependency>

然后,我尝试更改为 Primefaces,并添加 primefaces 依赖项:

<dependency>
    <groupId>org.primefaces</groupId>
    <artifactId>primefaces</artifactId>
    <version>6.0</version>
</dependency>

我将 xhtml 从 h: 更改为 p:,将 xmlns:p="http://primefaces.org/ui 添加到模板中。只有使用 JSF,proyect 才能正常运行,并且 managedbean 也正常。当我添加 Primefaces我得到了无法访问的对象(javax.el.propertynotfoundexception)。问题是 JSF 正在生成 ManagedBean,而不是 Primefaces,并且我正在为该对象询问 primefaces。我必须从我的 .pom 中删除 jsf-impl,清理并安装项目。从这一点开始一切顺利。希望有帮助。

于 2016-11-15T08:06:01.630 回答
-3

EL 解释 ${bean.propretyName} 描述 - 假设您使用显式或隐式方法生成 getter/setter,propertyName 变为 getPropertyName()

您可以通过将名称显式标识为函数来覆盖此行为: ${bean.methodName()} 这会直接调用函数方法 Name() 而无需修改。

您的访问器被命名为“get...”并不总是正确的。

于 2018-08-19T10:03:21.290 回答
-3

在我的情况下,“el-ri-1.0.jar”丢失了。

于 2020-03-25T09:16:42.000 回答