识别和解决javax.el.PropertyNotFoundException:目标不可访问


127

当像这样尝试在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

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




突然,这对我来说很麻烦... 通过停止服务器,删除javax.faces.jar(Mojarra),删除构建目录并清理WebLogic服务器的\ tmp \来解决此问题(它无法识别我的bean)和\ cache \文件夹中的文件夹,再次启动服务器,尝试发布并由于找不到Javax而失败,通过SVN还原javax.faces.jar删除(因此您可以将其移出然后将其移回),然后发布。突然之间,它又重新开始工作了
Andrew

始终检查上面几行以了解部署时发生的相关日志消息,这是实际的根本原因:Class [ Lorg/mxchange/jfinancials/model/receipt/FinancialAdminReceiptSessionBeanRemote; ] not found. Error while loading [ cl ass org.mxchange.jfinancials.beans.financial.model.receipt.FinancialAdminReceiptWebRequestBean ]]]FinancialAdminReceiptWebRequestBean不能确定并解决所述bean()null。另一个常见的错误是,例如在重命名或移动类/接口(或忘记了clean)后不重新启动应用程序服务器。
罗兰

Answers:


238

1.无法到达目标,标识符“ bean”解析为空

可以归结为,像这样,无法通过EL中的那个标识符(托管Bean名称)准确地找到托管Bean实例本身#{bean}

查明原因可分为三个步骤:

一个。谁在管理bean?
b。(默认)托管Bean名称是什么?
C。支持bean类在哪里?

1a。谁在管理bean?

第一步是检查哪个bean管理框架负责管理bean实例。是通过JSF@ManagedBean吗?还是CDI通过@Named?还是通过Spring@Component?您能确定不会在同一个支持bean类上混合使用多个特定于bean管理框架的注释吗?例如@Named @Component@Named @ManagedBean@ManagedBean @Component。错了 该bean必须最多由一个bean管理框架管理,并且该框架必须正确配置。如果您不知道要选择哪个,请转到支持bean(@ManagedBean)或CDI Beans(@Named)?Spring JSF集成:如何在JSF托管bean中注入Spring组件/服务?

如果是JSF通过来管理Bean @ManagedBean,那么您需要确保以下几点:

  • 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.0by 2_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_22.2通过2_32.3分别。

  • 您不是无意中导入了javax.annotation.ManagedBean而不是javax.faces.bean.ManagedBean。使用IDE自动完成功能当心,众所周知,Eclipse会自动建议错误的列表中的第一项。

  • 您没有在同一个支持Bean类上使用@ManagedBeanJSF 1.x样式<managed-bean>条目faces-config.xml以及其他托管Bean名称来覆盖。这将优先于@ManagedBeanfaces-config.xml从JSF 2.0开始,无需在其中注册托管bean ,只需将其删除即可。
  • 您的运行时类路径是干净的,并且没有与JSF API相关的JAR中的重复项。确保您没有混合使用多个JSF实现(Mojarra和MyFaces)。当目标容器已经将JSF API捆绑在包装盒中时,请确保您没有在webapp上提供其他JSF甚至Java EE API JAR文件。另请参阅我们的JSF Wiki页面的“安装JSF”部分,以获取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>in faces-config.xml而不是通过注册Bean @ManagedBean。不要忘了修正项目构建路径,以使您不再拥有JSF 2.x库(这样@ManagedBean就不会混淆成功地注释注释)。


如果是CDI通过来管理Bean @Named,那么您需要确保以下几点:

  • /WEB-INF/beans.xml为了在WAR中启用CDI,CDI 1.0(Java EE 6)需要一个文件。它可以为,也可以仅包含以下内容:

    <?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.xmlbeans.xml文件或与上述CDI 1.0兼容,beans.xml则其行为与CDI 1.0相同。当有一个CDI 1.1兼容beans.xml有一个明确的version="1.1",那么它会在默认情况下只能注册@Named豆类一个明确的CDI范围注释,如@RequestScoped@ViewScoped@SessionScoped@ApplicationScoped,等等。如果你打算为CDI托管bean注册所有豆类,即使是那些没有明确的CDI范围,请使用以下/WEB-INF/beans.xmlbean-discovery-mode="all"set 兼容的CDI 1.1 (默认为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"(默认)一起使用时,由于bug,您需要将Mojarra升级到2.3.3或更高版本。如果无法升级,则需要设置bean-discovery-mode="all"in beans.xml或将JSF 2.3特定的@FacesConfig注释放在WAR中的任意类上(通常是某种应用程序范围的启动类)。
  • Tomcat和Jetty等非Java EE容器未附带捆绑的CDI。您需要手动安装。与添加库JAR相比,这需要做更多的工作。对于Tomcat,请确保遵循以下答案中的指示信息:如何在Tomcat上安装和使用CDI?
  • 您的运行时类路径是干净的,并且没有与CDI API相关的JAR中的重复项。确保您没有混合使用多种CDI实现(Weld,OpenWebBeans等)。当目标容器已将CDI API打包为开箱即用时,请确保不要在webapp上提供其他CDI甚至Java EE API JAR文件。
  • 如果要在JAR中将CDI托管的bean用于JSF视图打包,则请确保JAR至少具有有效的值/META-INF/beans.xml(可以将其保留为空)。


如果是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配置有关的麻烦)


如果它是一个中继器部件谁是通过其管理(套)豆var属性(如<h:dataTable var="item"><ui:repeat var="item"><p:tabView var="item">,等),你实际上得到了一个“目标不可达,标识‘项目’解析为空”,那么你需要做以下的肯定:

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


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

第二步是检查注册的受管Bean名称。JSF和Spring使用约定符合JavaBeans规范,而CDI则具有取决于CDI impl / version的异常。

  • FooBean支撑类象下面,

    @Named
    public class FooBean {}

    #{fooBean}根据JavaBeans规范,所有bean管理框架中的默认托管bean名称将为。

  • FOOBean支撑类象下面,

    @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}

  • 如果您明确指定了foo如下所示的托管Bean名称,

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

    或等价于@ManagedBean(name="foo")@Component("foo"),则只能由#{foo}不是由可用#{fooBean}


1c。支持bean类在哪里?

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

如果使用的是Eclipse,请确保backing bean类在其中,src不是 WebContent,并确保启用了Project> Build Automatically。如果您使用的是Maven,确保支撑类是在src/main/java,因此没有src/main/resourcessrc/main/webapp

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


2.无法到达目标,“实体”返回null

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

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

如果要在同一视图上使用CRUD列表和/或对话框,则需要确保预先在@PostConstruct<f:viewAction>方法或add()操作方法中准备了模型实体。

@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; 如果您正在使用使用代理(例如CDI)的bean管理框架,则在常规构造函数中执行此操作将失败。始终使用@PostConstruct钩子托管bean实例初始化(并使用@PreDestroy钩子托管bean实例销毁)。此外,在构造函数中,您将无法访问任何注入的依赖项,请参阅NullPointerException,同时尝试在构造函数中访问@Inject bean

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

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


3. Target Unreachable,“ null”返回null

这实际上与#2具有相同的原因,只是使用的(较旧的)EL实现在保留要显示在异常消息中的属性名称时有些错误,最终错误地将其显示为“空”。仅当您具有类似这样的嵌套属性时,这才使调试和修复变得困难#{bean.entity.subentity.subsubentity.property}

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


4.无法到达目标,“ 0”返回null

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

无法到达目标,“ collection [0]”返回null

解决方案也与#2相同:确保收集项可用。


5.无法到达目标,“ BracketSuffix”返回null

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


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


我遇到了数字3。#{bean.entity.property}确实输出了值,但是<p:selectBooleanCheckbox value="#{bean.entity.property}"/>失败了。我的布尔值确实有一个setter。当在输入字段中使用时,同一实体上的整数属性确实起作用。有任何想法吗?
贾斯珀·德弗里斯

另一件事值得一检查是确保您的JSF和CDI实现整合,这是我的问题:stackoverflow.com/questions/44064995/...
杰里B.一号实习生

根据:Target Unreachable, identifier 'bean' resolved to null在多模块Maven项目(包含ejb,web,ear的模块)中,请确保您的Web模块声明了对ejb-module的依赖。@ManagedBean否则,将无法使用JSF2.0进行解析,而您必须在中声明它们faces-config.xml。花了大约两个小时的时间通知我,我没有声明将ejb包含在我的Web模块中的依赖项(只在我的耳朵中包含ejb和web)
bish

1
@bish诸如@ManagedBean类之类的前端工件最初并不属于服务层(EJB项目)。另请参见stackoverflow.com/questions/13011392/jsf-service-layer
BalusC

不能序列化的bean也可能导致此错误(因为我怀疑在stackoverflow.com/questions/47533584/…中是这种情况(但目前无法自己尝试))
Kukeltje

6

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

由于某些原因,将NetBeans 8.1和GlassFish 4.1与CDI一起使用时,我仅在本地而不是在远程服务器上遇到此问题。诀窍是什么:

->使用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文件夹),然后重新启动服务器。


这与“您的运行时类路径是干净的并且没有CDI API相关的JAR中的重复项”匹配换句话说,您的运行时类路径在某种程度上被重复的库弄乱了。
BalusC

确实,您的回答帮助我确定了我应该关注的可能问题;-)仅在此处提供我的特定解决方案的详细信息,即可为几个用户节省时间。
seinecle '16

1

我自己解决此错误后,决定分享我的发现。

首先,应该认真考虑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'解析为null”的 错误,

我右键单击父POM项目,然后选择“ 属性”。出现“项目属性”对话框,单击“源”,您会惊讶地看到“ 源/二进制格式 ”设置为1.5,“ 编码 ”设置为Windows1250。将“ 源/二进制格式 ” 更改为1.6 0r 1.7您更希望使您的项目符合CDI,并“ 编码 ”为UTF-8。

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

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


我发现您的答案通常很难理解(很多不直接相关的信息),并且源/二进制格式和编码在此问题中也起着作用。您确定更改此方法不仅会触发解决问题的良好/完整重建过程吗?
库克尔杰(Kukeltje)

1

我决定分享我的解决方案,因为尽管此处提供的许多答案很有帮助,但我仍然遇到这个问题。就我而言,我为新项目使用了JSF 2.3,jdk10,jee8,cdi 2.0,并且我确实在wildfly 12上运行了我的应用,并按照wildfly网站上的建议,使用参数standalone.sh -Dee8.preview.mode = true启动了服务器。在下载wildfly 13之后,“ bean解析为null”的问题消失了。将完全相同的战争上传到wildfly 13使得一切正常。


1

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

这次我想更具体地指出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")

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


0

在我的情况下,我在@Named(“ beanName”)中犯了一个拼写错误,它应该是“ beanName”,但是例如,我写了“ beanNam”。


0

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


0

我有同样的问题。事实证明该解决方案要简单得多。看来,数据表希望该方法以getter的形式出现,即getSomeMethod(),而不仅仅是someMethod()。就数据表而言,我正在调用findResults。我将我的后备bean中的方法更改为getFindResults()并成功了。

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


0

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

<body>

标记

<h:body>

在完成了几个(简单来说,更简单)的JSF项目之后,我不记得现在要进行任何其他设置了,而且我第一次遇到这种错误。我创建了一个非常基本的登录页面(用户名,密码,用户Bean ...),并像往常一样设置了所有内容。我发现的唯一区别是上述标签。也许有人觉得这很有用。


0

在我的情况下,问题是我包括一个带有参数的构造函数,但没有一个带有Inject注释的空构造函数,像这样。

@Inject public VisitorBean() {}

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


0

对于1.主题(Target Unreachable,标识符'bean'解析为null);

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


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> 

在乎详细说明为什么可以解决呢?或者更确切地说为什么拥有它会引起问题?
Kukeltje

-1

使用旧风格的JSF,您必须在beans-config.xml文件(位于WEB-INF文件夹中)中定义托管Bean, 并通过以下方式在web.xml文件中对其进行引用:

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

-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,并清除它。从现在开始一切正常,希望对您有所帮助。


2
您对问题原因的假设没有任何意义。PrimeFaces根本不是JSF实现。这符合“您的运行时类路径是干净的并且没有与CDI API相关的JAR中的重复项”的要求换句话说,您的运行时类路径在某种程度上被重复的库弄得一团糟,PrimeFaces只是将其放大而不会引起它。
BalusC

-3

EL按照说明解释$ {bean.propretyName}-假设您使用的是生成getter / setter的显式或隐式方法,则propertyName变为getPropertyName()

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

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


1
这不是正确的做法,因此无法调用输入组件后面的正确设置器。这也不能成为上述异常的原因。这只会导致您在操作方法表达式(例如action="#{bean.property}"而不是)中引用属性时犯了上述错误action="#{bean.method}"
BalusC

值得注意的是,在具有功能编程的现代Java世界中,这种“正确的做法”正在发生变化。请参阅dev.to/scottshipp/… 及其参考。请注意,Lombok具有未添加get / set的“ fluent”设置。我们公司有1000名工程师,他们对当前的实践似乎有不同的看法。
sdw

1
我认为您和您的1000名工程师正在使属性与方法混淆。
BalusC

这种设计实践在具有很高并发性的大规模应用中变得很普遍。我希望您的反对意见是基于设计指南的一种观点,而不是答案的价值,它可以帮助我们广大的社区追踪潜在的错误。
sdw

1
??抱歉,我无法忽略您不知道自己在说什么的印象。
BalusC

-3

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


1
通常,您根本不需要它,所以还有其他事情要解决。最有可能是肮脏的运行时类路径。您应该通过添加应该由服务器提供的库来解决此问题,而不是使其长期恶化。
BalusC
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.