Xác định và giải quyết javax.el.PropertyNotFoundException: Mục tiêu không thể tiếp cận

128
BalusC 2015-05-09 06:15.

Khi cố gắng tham chiếu đến một bean được quản lý trong EL như vậy #{bean.entity.property}, đôi khi một javax.el.PropertyNotFoundException: Target Unreachablengoại lệ được ném ra, thường là khi một thuộc tính bean được thiết lập hoặc khi một hành động bean được gọi.

Dường như có năm loại thông điệp khác nhau:

  1. Không thể truy cập mục tiêu, số nhận dạng 'bean' được giải quyết thành null
  2. Không thể truy cập mục tiêu, 'thực thể' trả về null
  3. Không thể truy cập mục tiêu, 'null' trả về null
  4. Mục tiêu Không thể truy cập, '' 0 '' trả về null
  5. Không thể truy cập mục tiêu, 'BracketSuffix' trả về null

Tất cả chúng có nghĩa là gì? Chúng được gây ra như thế nào và nên giải quyết như thế nào?

13 answers

241
BalusC 2015-05-09 06:15.

1. Mục tiêu Không thể truy cập, định danh 'bean' được giải quyết thành null

Điều này dẫn đến kết quả là bản thân cá thể bean được quản lý không thể được tìm thấy bằng chính xác mã định danh đó (tên bean được quản lý) trong EL như vậy #{bean}.

Việc xác định nguyên nhân có thể được chia thành ba bước:

a. Ai đang quản lý hạt đậu?
b. Tên bean được quản lý (mặc định) là gì?
c. Lớp đậu ủng hộ ở đâu?

1a. Ai đang quản lý hạt đậu?

Bước đầu tiên sẽ là kiểm tra khung quản lý bean nào chịu trách nhiệm quản lý cá thể bean. Có phải nó thông qua CDI@Named ? Hay là JSF thông qua @ManagedBean? Hay là mùa xuân qua @Component? Bạn có thể đảm bảo rằng bạn không trộn nhiều chú thích cụ thể của khung quản lý bean trên cùng một lớp đậu hỗ trợ không? Ví dụ @Named @ManagedBean, @Named @Componenthoặc @ManagedBean @Component. Cái này sai. Bean phải được quản lý bởi nhiều nhất một khung quản lý bean và khung đó phải được định cấu hình đúng. Nếu bạn chưa biết nên chọn loại nào, hãy chuyển đến Backing bean (@ManagedBean) hoặc CDI Beans (@Named)? tích hợp Spring JSF: làm thế nào để đưa một thành phần / dịch vụ Spring vào bean được quản lý JSF?

Trong trường hợp CDI đang quản lý bean thông qua @Named, thì bạn cần đảm bảo những điều sau:

  • CDI 1.0 (Java EE 6) yêu cầu một /WEB-INF/beans.xmltệp để kích hoạt CDI trong WAR. Nó có thể trống hoặc nó có thể chỉ có nội dung sau:

      <?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) không có bất kỳ beans.xml, hoặc beans.xmltệp trống hoặc tương thích với CDI 1.0 ở trên beans.xmlsẽ hoạt động giống như CDI 1.0. Khi có một CDI 1.1 tương thích beans.xmlvới một rõ ràng version="1.1", sau đó nó sẽ theo mặc định chỉ đăng ký @Namedđậu với một CDI phạm vi chú thích rõ ràng như @RequestScoped, @ViewScoped, @SessionScoped, @ApplicationScoped, vv Trong trường hợp bạn có ý định đăng ký tất cả đậu như CDI quản lý đậu, ngay cả những người không có rõ ràng Phạm vi CDI, sử dụng CDI 1.1 dưới đây tương thích /WEB-INF/beans.xmlvới bean-discovery-mode="all"bộ (mặc định là 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>
    
  • Khi sử dụng CDI 1.1+ với bean-discovery-mode="annotated"(mặc định), hãy đảm bảo rằng bạn không vô tình nhập phạm vi JSF, chẳng hạn như javax.faces.bean.RequestScopedthay vì phạm vi CDI javax.enterprise.context.RequestScoped. Hãy chú ý với tính năng tự động hoàn thành IDE.

  • Khi sử dụng Mojarra 2.3.0-2.3.2 và CDI 1.1+ với bean-discovery-mode="annotated"(mặc định), bạn cần nâng cấp Mojarra lên 2.3.3 hoặc mới hơn do có lỗi . Trong trường hợp bạn không thể nâng cấp, sau đó bạn cần hoặc để thiết lập bean-discovery-mode="all"trong beans.xml, hoặc để đưa cụ JSF 2.3 @FacesConfigchú thích trên một lớp tùy ý trong WAR (thường một số loại của một ứng dụng scoped lớp khởi động).

  • Khi sử dụng JSF 2.3 trên vùng chứa Servlet 4.0 với web.xmlServlet 4.0 phù hợp đã khai báo, thì bạn cần phải đặt @FacesConfigchú thích cụ thể JSF 2.3 rõ ràng trên một lớp tùy ý trong WAR (thường là một số loại lớp khởi động có phạm vi ứng dụng). Điều này là không cần thiết trong Servlet 3.x.

  • Các vùng chứa không phải Java EE như Tomcat và Jetty không giao hàng với CDI đi kèm. Bạn cần phải cài đặt nó theo cách thủ công. Nó hơi nhiều công việc hơn là chỉ thêm (các) thư viện JAR. Đối với Tomcat, hãy đảm bảo rằng bạn làm theo hướng dẫn trong câu trả lời này: Làm thế nào để cài đặt và sử dụng CDI trên Tomcat?

  • Classpath thời gian chạy của bạn sạch sẽ và không có bản sao trong các JAR liên quan đến API CDI. Đảm bảo rằng bạn không trộn nhiều triển khai CDI (Weld, OpenWebBeans, v.v.). Đảm bảo rằng bạn không cung cấp tệp CDI hoặc thậm chí là Java EE API JAR khác dọc theo ứng dụng web khi vùng chứa đích đã gói sẵn API CDI.

  • Nếu bạn đang đóng gói các bean được quản lý bởi CDI cho các khung nhìn JSF trong một JAR, thì hãy đảm bảo rằng JAR có ít nhất một giá trị hợp lệ /META-INF/beans.xml(có thể để trống).


Trong trường hợp JSF đang quản lý bean thông qua kể từ 2.3 không được dùng nữa @ManagedBeanvà bạn không thể chuyển sang CDI, thì bạn cần đảm bảo những điều sau:

  • Các faces-config.xmltuyên bố gốc tương thích với JSF 2.0. Vì vậy, các tập tin XSD và versionphải ít nhất định JSF 2.0 hoặc cao hơn và do đó không 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">
    

    Đối với JSF 2.1, chỉ cần thay thế 2_02.0bởi 2_12.1tương ứng.

    Nếu bạn đang sử dụng JSF 2.2 trở lên, hãy đảm bảo rằng bạn đang sử dụng xmlns.jcp.orgkhông gian tên thay vì ở java.sun.comkhắp nơi.

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

    Đối với JSF 2.3, chỉ cần thay thế 2_22.2bởi 2_32.3tương ứng.

  • Bạn không vô tình nhập javax.annotation.ManagedBeanthay vì javax.faces.bean.ManagedBean. Hãy chú ý với tính năng tự động hoàn thành IDE, Eclipse được biết là tự động đề xuất sai mục đầu tiên trong danh sách.

  • Bạn đã không ghi đè mục nhập @ManagedBeankiểu JSF 1.x trên cùng một lớp bean sao lưu cùng với một tên bean được quản lý khác. Cái này sẽ được ưu tiên hơn . Việc đăng ký bean được quản lý là không cần thiết vì JSF 2.0, chỉ cần xóa nó.<managed-bean>faces-config.xml@ManagedBeanfaces-config.xml

  • Đường dẫn thời gian chạy của bạn sạch sẽ và không có bản sao trong các JAR liên quan đến API JSF. Đảm bảo rằng bạn không trộn nhiều triển khai JSF (Mojarra và MyFaces). Đảm bảo rằng bạn không cung cấp tệp JSF hoặc thậm chí Java EE API JAR khác dọc theo ứng dụng web khi vùng chứa đích đã gói sẵn API JSF. Xem thêm phần "Cài đặt JSF" trên trang wiki JSF của chúng tôi để biết hướng dẫn cài đặt JSF. Trong trường hợp bạn dự định nâng cấp JSF gói vùng chứa từ WAR thay vì trong chính vùng chứa, hãy đảm bảo rằng bạn đã hướng dẫn vùng chứa đích sử dụng API / impl JSF gói WAR.

  • Nếu bạn đang đóng gói các bean được quản lý JSF trong một JAR, thì hãy đảm bảo rằng JAR có ít nhất một JSF 2.0 tương thích /META-INF/faces-config.xml. Xem thêm Cách tham chiếu các bean được quản lý JSF được cung cấp trong tệp JAR?

  • Nếu bạn thực sự đang sử dụng jurassic JSF 1.x và bạn không thể nâng cấp, thì bạn cần đăng ký bean qua <managed-bean>in faces-config.xmlthay vì @ManagedBean. Đừng quên sửa đường dẫn xây dựng dự án của bạn để bạn không còn thư viện JSF 2.x nữa (để @ManagedBeanchú thích không biên dịch thành công một cách khó hiểu).


Trong trường hợp Spring đang quản lý bean thông qua @Component, thì bạn cần đảm bảo những điều sau:

  • Spring đang được cài đặt và tích hợp theo tài liệu của nó . Điều quan trọng, ít nhất bạn cần phải có điều này trong web.xml:

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

    Và điều này trong faces-config.xml:

      <application>
          <el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver>
      </application>
    
  • (trên đây là tất cả những gì tôi biết liên quan đến Spring - Tôi không làm Spring - vui lòng chỉnh sửa / nhận xét với các nguyên nhân có thể xảy ra khác liên quan đến Spring; ví dụ: một số rắc rối liên quan đến cấu hình XML)


Trong trường hợp đó là một thành phần lặp lại của những người quản lý (lồng) đậu qua nó varthuộc tính (ví dụ như <h:dataTable var="item">, <ui:repeat var="item">, <p:tabView var="item">, vv) và bạn thực sự có một "Target Unreachable, nhận dạng 'mục' quyết tâm vô giá trị", thì bạn cần phải chắc chắn rằng những điều sau đây :

  • Không #{item}được tham chiếu trong thuộc bindingtính của bất kỳ thành phần con nào. Điều này không chính xác vì bindingthuộc tính chạy trong thời gian tạo chế độ xem, không phải trong thời gian hiển thị chế độ xem. Hơn nữa, về mặt vật lý chỉ có một thành phần trong cây thành phần được sử dụng lại đơn giản trong mỗi vòng lặp. Nói cách khác, bạn thực sự nên sử dụng binding="#{bean.component}"thay vì binding="#{item.component}". Nhưng tốt hơn nhiều là bạn nên loại bỏ hoàn toàn kết nối thành phần với bean và điều tra / hỏi cách tiếp cận thích hợp cho vấn đề mà bạn nghĩ để giải quyết theo cách này. Xem thêm Thuộc tính 'ràng buộc' hoạt động như thế nào trong JSF? Nó nên được sử dụng khi nào và như thế nào?


1b. Tên bean được quản lý (mặc định) là gì?

Bước thứ hai sẽ là kiểm tra tên bean quản lý đã đăng ký. Các quy ước sử dụng JSF và Spring tuân theo đặc tả JavaBeans trong khi CDI có các ngoại lệ tùy thuộc vào phiên bản / phiên bản CDI.

  • Một FooBeanlớp đậu ủng hộ như bên dưới,

      @Named
      public class FooBean {}
    

    trong tất cả các khung quản lý bean sẽ có một tên bean được quản lý mặc định #{fooBean}, theo đặc tả JavaBeans.

  • Một FOOBeanlớp đậu ủng hộ như bên dưới,

      @Named
      public class FOOBean {}
    

    có tên lớp không đủ tiêu chuẩn bắt đầu bằng ít nhất hai chữ hoa trong JSF và Spring sẽ có tên bean được quản lý mặc định của chính xác tên lớp không đủ tiêu chuẩn #{FOOBean}, cũng phù hợp với đặc tả JavaBeans. Trong CDI, đây cũng là trường hợp trong các phiên bản Weld được phát hành trước tháng 6 năm 2015, nhưng không phải trong các phiên bản Weld được phát hành sau tháng 6 năm 2015 (2.2.14 / 2.3.0.B1 / 3.0.0.A9) cũng như trong OpenWebBeans do sự giám sát trong Thông số CDI . Trong các phiên bản Weld đó và trong tất cả các phiên bản OWB, nó chỉ có ký tự đầu tiên được viết thường #{fOOBean}.

  • Nếu bạn đã chỉ định rõ ràng một tên bean được quản lý foonhư bên dưới,

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

    hoặc tương đương với @ManagedBean(name="foo")hoặc @Component("foo"), thì nó sẽ chỉ có sẵn bởi #{foo}và do đó không có sẵn bởi #{fooBean}.


1c. Lớp đậu ủng hộ ở đâu?

Bước thứ ba sẽ là kiểm tra kép nếu lớp đậu hỗ trợ nằm ở đúng vị trí trong tệp WAR được xây dựng và triển khai. Đảm bảo rằng bạn đã thực hiện đúng cách hoàn toàn sạch sẽ, xây dựng lại, triển khai lại và khởi động lại dự án và máy chủ trong trường hợp bạn thực sự bận viết mã và thiếu kiên nhẫn nhấn F5 trong trình duyệt. Nếu vẫn vô ích, hãy để hệ thống xây dựng tạo ra tệp WAR, sau đó bạn giải nén và kiểm tra bằng công cụ ZIP. Tệp đã biên dịch .classcủa lớp đậu hỗ trợ phải nằm trong cấu trúc gói của nó trong /WEB-INF/classes. Hoặc, khi nó được đóng gói như một phần của mô-đun JAR, thì JAR chứa .classtệp đã biên dịch phải nằm trong /WEB-INF/libvà do đó không phải là của EAR /libhoặc ở nơi khác.

Nếu bạn đang sử dụng Eclipse, hãy đảm bảo rằng lớp đậu hỗ trợ có trong srcvà do đó không WebContent , và đảm bảo rằng Dự án> Xây dựng Tự động được bật. Nếu bạn đang sử dụng Maven, hãy đảm bảo rằng lớp đậu hỗ trợ nằm trong src/main/javavà do đó không nằm trong src/main/resourceshoặc src/main/webapp.

Nếu bạn đang đóng gói ứng dụng web như một phần của EAR với (các) EJB + WAR, thì bạn cần đảm bảo rằng các lớp đậu hỗ trợ nằm trong mô-đun WAR và do đó không nằm trong mô-đun EAR cũng như mô-đun EJB. Cấp doanh nghiệp (EJB) phải không có bất kỳ phần mềm tạo tác liên quan đến cấp web (WAR) nào, để cấp kinh doanh có thể được sử dụng lại trên nhiều cấp web khác nhau (JSF, JAX-RS, JSP / Servlet, v.v.).


2. Mục tiêu Không thể truy cập, 'thực thể' trả về null

Điều này boils xuống rằng lồng nhau tài sản entitynhư trong #{bean.entity.property}trở lại null. Điều này thường chỉ hiển thị khi JSF cần đặt giá trị cho propertythông qua một thành phần đầu vào như bên dưới, trong khi #{bean.entity}thực sự được trả về null.

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

Bạn cần đảm bảo rằng bạn đã chuẩn bị trước thực thể mô hình trong một @PostConstruct, hoặc <f:viewAction>phương thức, hoặc có thể là một add()phương thức hành động trong trường hợp bạn đang làm việc với danh sách CRUD và / hoặc hộp thoại trên cùng một chế độ xem.

@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();
    }

    // ...
}

Đối với tầm quan trọng của @PostConstruct; làm điều này trong một phương thức khởi tạo thông thường sẽ không thành công trong trường hợp bạn đang sử dụng khung quản lý bean sử dụng proxy , chẳng hạn như CDI. Luôn sử dụng @PostConstructđể móc vào khởi tạo cá thể bean được quản lý (và sử dụng @PreDestroyđể móc vào việc phá hủy cá thể bean được quản lý). Ngoài ra, trong một phương thức khởi tạo, bạn sẽ không có quyền truy cập vào bất kỳ phụ thuộc được chèn nào, hãy xem thêm NullPointerException trong khi cố gắng truy cập @Inject bean trong hàm tạo .

Trong trường hợp entityIdđược cung cấp thông qua <f:viewParam>, bạn cần sử dụng <f:viewAction>thay thế @PostConstruct. Xem thêm Khi nào sử dụng f: viewAction / preRenderView so với PostConstruct?

Bạn cũng cần đảm bảo rằng bạn giữ nguyên nullmô hình không phải là mô hình trong khi đăng lại trong trường hợp bạn chỉ tạo nó trong một add()phương thức hành động. Dễ dàng nhất là đặt bean trong phạm vi xem. Xem thêm Làm thế nào để chọn đúng phạm vi đậu?


3. Mục tiêu Không thể truy cập, 'null' trả về null

Điều này thực sự có cùng nguyên nhân với # 2, chỉ có triển khai EL (cũ hơn) đang được sử dụng hơi có lỗi trong việc bảo toàn tên thuộc tính để hiển thị trong thông báo ngoại lệ, cuối cùng được hiển thị không chính xác là 'null'. Điều này chỉ làm cho việc gỡ lỗi và sửa lỗi khó hơn một chút khi bạn có khá nhiều thuộc tính lồng nhau như vậy #{bean.entity.subentity.subsubentity.property}.

Giải pháp vẫn giống nhau: đảm bảo rằng thực thể lồng nhau được đề cập không phải nullở tất cả các cấp.


4. Không thể truy cập mục tiêu, '' 0 '' trả về null

Điều này cũng có nguyên nhân tương tự như # 2, chỉ có triển khai EL (cũ hơn) đang được sử dụng là có lỗi trong việc xây dựng thông báo ngoại lệ. Điều này chỉ hiển thị khi bạn sử dụng ký hiệu dấu ngoặc nhọn []trong EL như trong #{bean.collection[index]}trường hợp #{bean.collection}chính nó không phải là null, nhưng mục tại chỉ mục được chỉ định không tồn tại. Thông báo như vậy sau đó phải được hiểu là:

Target Unreachable, 'collection [0]' trả về giá trị rỗng

Giải pháp cũng giống như # 2: đảm bảo rằng vật phẩm thu thập có sẵn.


5. Mục tiêu Không thể truy cập, 'BracketSuffix' trả về null

Điều này thực sự có cùng nguyên nhân với # 4, chỉ có triển khai EL (cũ hơn) đang được sử dụng hơi lỗi trong việc bảo toàn chỉ số lặp để hiển thị trong thông báo ngoại lệ, cuối cùng được hiển thị không chính xác là 'BracketSuffix' thực sự là ký tự ]. Điều này chỉ khiến việc gỡ lỗi và sửa lỗi khó hơn một chút khi bạn có nhiều mục trong bộ sưu tập.


Các nguyên nhân có thể khác của javax.el.PropertyNotFoundException:

6
seinecle 2016-02-04 14:08.

Dành cho những ai còn đang bế tắc ...

Sử dụng NetBeans 8.1 và GlassFish 4.1 với CDI, vì lý do nào đó, tôi gặp sự cố này chỉ cục bộ, không phải trên máy chủ từ xa. Cái gì đã lừa:

-> sử dụng javaee-web-api 7.0 thay vì phiên bản pom mặc định do NetBeans cung cấp, là javaee-web-api 6.0, vì vậy:

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

-> tải lên javaee-web-api-7.0.jar này dưới dạng lib lên máy chủ (thư mục lib trong thư mục domain1) và khởi động lại máy chủ.

1
Gbenga Adebowale 2017-07-08 01:49.

Tôi quyết định chia sẻ phát hiện của mình về lỗi này sau khi tự mình giải quyết.

Trước hết, các giải pháp BalusC nên được xem xét nghiêm túc nhưng sau đó, có một vấn đề khác có thể xảy ra trong Netbeans cần lưu ý, đặc biệt là khi xây dựng Dự án ứng dụng doanh nghiệp (EAR) bằng Maven.

Netbeans tạo, một tệp POM mẹ , một dự án EAR , một dự án EJB và một dự án WAR . Mọi thứ khác trong dự án của tôi đều ổn và tôi gần như cho rằng vấn đề là lỗi trong GlassFish 4.0 có thể là lỗi (tôi phải cài đặt và cắm nó vào Netbeans) vì GlassFish 4.1 có một lỗi Weld CDI khiến cho GlassFish 4.1 được nhúng trong Netbeans 8.0. 2 không sử dụng được ngoại trừ thông qua một bản vá.

Giải pháp:

Để giải quyết "Target Unreachable, nhận dạng 'đậu' quyết tâm vô giá trị" sai sót

Nhấp chuột phải vào dự án POM mẹ và chọn Thuộc tính . Hộp thoại Thuộc tính Dự án xuất hiện, nhấp vào "Nguồn", bạn sẽ ngạc nhiên khi thấy " Định dạng Nguồn / Nhị phân " được đặt thành 1.5 và " Mã hóa " được đặt thành Windows 1250. Thay đổi " Định dạng Nguồn / Nhị phân " thành 1.6 0r 1.7, tùy theo tùy chọn nào bạn muốn làm cho dự án của mình tuân thủ CDI và " Mã hóa " thành UTF-8.

Làm tương tự cho tất cả các tiểu dự án khác (EAR, EJB, WAR) nếu chúng chưa thể so sánh được. Chạy dự án của bạn và bạn sẽ không gặp lại lỗi đó.

Tôi hy vọng điều này sẽ giúp ai đó có lỗi tương tự.

1
Urszula Szczęśniak 2018-07-13 05:04.

Tôi quyết định chia sẻ giải pháp của mình, bởi vì mặc dù nhiều câu trả lời được cung cấp ở đây rất hữu ích, tôi vẫn gặp sự cố này. Trong trường hợp của tôi, tôi đang sử dụng JSF 2.3, jdk10, jee8, cdi 2.0 cho dự án mới của mình và tôi đã chạy ứng dụng của mình trên wildfly 12, khởi động máy chủ với tham số standalone.sh -Dee8.preview.mode = true theo khuyến nghị trên trang web wildfly . Sự cố với "bean đã giải quyết thành null" đã biến mất sau khi tải xuống wildfly 13. Việc tải lên chính xác cuộc chiến tương tự lên wildfly 13 đã làm cho tất cả hoạt động.

1
Claudiomir 2019-11-18 01:37.

Tôi gặp phải lỗi này vì trong lớp có lỗi, @SpringBootApplicationtôi đã quên chỉ định tên gói của bộ điều khiển.

Lần này tôi muốn cụ thể hơn chỉ ra các thành phần mà Spring phải quét, thay vì cấu hình gói cơ sở.

Nó như thế này:

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

Nhưng dạng đúng là một trong những dạng sau:

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

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

Tôi quyết định chia sẻ giải pháp của mình, bởi vì mặc dù câu trả lời chính xác rất toàn diện, nhưng nó không che được sai lầm (ngu ngốc) này :)

0
lfvv 2017-03-17 03:59.

Trong trường hợp của tôi, tôi đã mắc lỗi chính tả trong @Named ("beanName"), nó được cho là "beanName", nhưng tôi đã viết "beanNam" chẳng hạn.

0
Osman Corluk 2017-04-23 23:30.

Tôi đang sử dụng wildfly 10 cho vùng chứa javaee. Tôi đã gặp phải sự cố "Mục tiêu không thể truy cập, 'thực thể' trả về giá trị không". Cảm ơn những đề xuất của BalusC nhưng vấn đề của tôi trong số các giải pháp đã được giải thích. Vô tình sử dụng "import com.sun.istack.logging.Logger;" thay vì "nhập org.jboss.logging.Logger;" khiến CDI triển khai JSF EL. Hy vọng nó sẽ giúp cải thiện giải pháp.

0
user6627139 2017-05-11 06:52.

Tôi đã từng gặp vấn đề tương tự. Giải pháp hóa ra đơn giản hơn nhiều. Có vẻ như một datatable muốn phương thức ở dạng getter, tức là getSomeMethod (), không chỉ someMethod (). Trong trường hợp của tôi trong dữ liệu, tôi đã gọi findResults. Tôi đã thay đổi phương thức trong bean sao lưu của mình thành getFindResults () và nó đã hoạt động.

CommandButton hoạt động tìm kiếm mà không nhận được phục vụ để làm cho nó khó hiểu hơn.

0
Gishas 2019-01-20 23:38.

Đối với # 2, trong trường hợp của tôi, nó đã sống lại một cách kỳ diệu sau khi thay thế

<body>

gắn thẻ với

<h:body>

Sau khi thực hiện một số dự án JSF (đơn giản hơn, thành thật mà nói), tôi không thể nhớ mình đã làm gì khác khi thiết lập nó ngay bây giờ và lần đầu tiên tôi gặp loại lỗi này. Tôi đang tạo một trang đăng nhập rất cơ bản (tên người dùng, mật khẩu, người dùng Bean ...) và thiết lập mọi thứ như bình thường. Sự khác biệt duy nhất tôi phát hiện là các thẻ nói trên. Có lẽ ai đó thấy điều này hữu ích.

0
gregam3 2019-02-27 10:12.

Vấn đề trong trường hợp của tôi là tôi đã bao gồm một hàm tạo nhận tham số nhưng không phải là một hàm tạo rỗng với chú thích Inject, như vậy.

@Inject public VisitorBean() {}

Tôi vừa thử nghiệm nó mà không có bất kỳ hàm tạo nào và điều này dường như cũng hoạt động.

0
oguzhankinik 2019-05-31 00:27.

Đối với 1. chủ đề ( Target Unreachable, định danh 'bean' được giải quyết thành null );

Tôi đã kiểm tra các câu trả lời có giá trị của @BalusC và những người chia sẻ khác nhưng tôi vượt quá sự cố như thế này trong kịch bản của tôi. Sau khi tạo một xhtml mới với tên khác và tạo lớp bean với tên khác, tôi đã viết (không phải copy-paste) mã từng bước vào lớp bean mới và tệp xhtml mới.

0
Yasin 2020-02-14 01:24.

Khi tôi xóa thông số ngữ cảnh AnnotationConfigWebApplicationContext khỏi tệp web.xml Đây là công việc

Nếu bạn có param giống như hình bên dưới, bạn phải xóa nó khỏi tệp web.xml

<context-param>
    <param-name>contextClass</param-name>
    <param-value>
      org.springframework.web.context.support.AnnotationConfigWebApplicationContext
  </param-value>
</context-param> 
0
erickdeoliveiraleal 2020-10-18 07:42.

Nó cũng có thể là một lỗi trong Mojarra 2.3 https://github.com/eclipse-ee4j/mojarra/issues/4734

Related questions

MORE COOL STUFF

Cate Blanchett chia tay chồng sau 3 ngày bên nhau và vẫn kết hôn với anh ấy 25 năm sau

Cate Blanchett chia tay chồng sau 3 ngày bên nhau và vẫn kết hôn với anh ấy 25 năm sau

Cate Blanchett đã bất chấp những lời khuyên hẹn hò điển hình khi cô gặp chồng mình.

Tại sao Michael Sheen là một diễn viên phi lợi nhuận

Tại sao Michael Sheen là một diễn viên phi lợi nhuận

Michael Sheen là một diễn viên phi lợi nhuận nhưng chính xác thì điều đó có nghĩa là gì?

Hallmark Star Colin Egglesfield Các món ăn gây xúc động mạnh đối với người hâm mộ tại RomaDrama Live! [Loại trừ]

Hallmark Star Colin Egglesfield Các món ăn gây xúc động mạnh đối với người hâm mộ tại RomaDrama Live! [Loại trừ]

Ngôi sao của Hallmark Colin Egglesfield chia sẻ về những cuộc gặp gỡ với người hâm mộ ly kỳ tại RomaDrama Live! cộng với chương trình INSPIRE của anh ấy tại đại hội.

Tại sao bạn không thể phát trực tuyến 'chương trình truyền hình phía Bắc'

Tại sao bạn không thể phát trực tuyến 'chương trình truyền hình phía Bắc'

Bạn sẽ phải phủi sạch đầu đĩa Blu-ray hoặc DVD để xem tại sao Northern Exposure trở thành một trong những chương trình nổi tiếng nhất của thập niên 90.

Where in the World Are You? Take our GeoGuesser Quiz

Where in the World Are You? Take our GeoGuesser Quiz

The world is a huge place, yet some GeoGuessr players know locations in mere seconds. Are you one of GeoGuessr's gifted elite? Take our quiz to find out!

8 công dụng tuyệt vời của Baking Soda và Giấm

8 công dụng tuyệt vời của Baking Soda và Giấm

Bạn biết đấy, hai sản phẩm này là nguồn điện để làm sạch, riêng chúng. Nhưng cùng với nhau, chúng có một loạt công dụng hoàn toàn khác.

Hạn hán, biến đổi khí hậu đe dọa tương lai của thủy điện Hoa Kỳ

Hạn hán, biến đổi khí hậu đe dọa tương lai của thủy điện Hoa Kỳ

Thủy điện rất cần thiết cho lưới điện của Hoa Kỳ, nhưng nó chỉ tạo ra năng lượng khi có nước di chuyển. Bao nhiêu nhà máy thủy điện có thể gặp nguy hiểm khi các hồ và sông cạn kiệt?

Quyên góp tóc của bạn để giúp giữ nước sạch của chúng tôi

Quyên góp tóc của bạn để giúp giữ nước sạch của chúng tôi

Tóc tỉa từ các tiệm và các khoản quyên góp cá nhân có thể được tái sử dụng như những tấm thảm thấm dầu và giúp bảo vệ môi trường.

Tận dụng lợi thế của việc bán hàng nhân Ngày của Cha này

Tận dụng lợi thế của việc bán hàng nhân Ngày của Cha này

Màn hình Samsung Galaxy S9 Plus. Chủ nhật này là Ngày của Cha⁠ — trong trường hợp nó khiến bạn suy nghĩ — và thay vì mua cho anh ấy một chiếc cà vạt trong năm nay, có lẽ đã đến lúc bạn mua cho anh ấy thứ mà anh ấy sẽ thực sự sử dụng.

Assassin's Creed Snuck Into Monster Hunter: World Last Night

Assassin's Creed Snuck Into Monster Hunter: World Last Night

Monster Hunter: World yêu thích các sự kiện chéo. Dù có nghĩa là hóa trang thành Dante của Devil May Cry, giả dạng Horizon: Zero Dawn's Aloy, hay chiến đấu với quái vật Final Fantasy, các nhiệm vụ sự kiện khác nhau của Thế giới được nâng cấp tự do so với các trò chơi khác.

Ava DuVernay Có Quà Tặng Ngày Của Mẹ cho Tất Cả Chúng Ta: Nếp Nhăn Thời Gian Sẽ Được Viết Lại Vào Cuối Tuần Ngày Của Mẹ!

Ava DuVernay Có Quà Tặng Ngày Của Mẹ cho Tất Cả Chúng Ta: Nếp Nhăn Thời Gian Sẽ Được Viết Lại Vào Cuối Tuần Ngày Của Mẹ!

Storm Reid, Oprah Winfrey, Mindy Kaling, Reese Witherspoon và Ava DuVernay tại buổi chiếu đặc biệt của A Wrinkle in Time tại Nhà hát Walter Reade ở Thành phố New York vào ngày 7 tháng 3 năm 2018 “Ava rất mong được nói chuyện với bạn,” một trong những người của Array dư luận viên nói qua điện thoại. (Array là tập thể phân phối, nghệ thuật và vận động chính sách của Ava DuVernay tập trung vào các bộ phim của người da màu và phụ nữ.

Nhiệm vụ bất khả thi 5 sẽ khôi phục niềm tin của bạn trong phim hành động Tentpole

Nhiệm vụ bất khả thi 5 sẽ khôi phục niềm tin của bạn trong phim hành động Tentpole

Mission Impossible: Rogue Nation bắt đầu ở một cấp độ khác. Theo nghĩa đen.

Edwin McCain ra mắt Grand Ole Opry: Quay cảnh hậu trường với nhạc sĩ 'I'll Be'

Edwin McCain ra mắt Grand Ole Opry: Quay cảnh hậu trường với nhạc sĩ 'I'll Be'

McCain, người đang làm việc cho một album mới, lần đầu tiên bước vào vòng kết nối vào tối thứ Sáu ở Nashville

Nicky Hilton Forced to Borrow Paris' 'I Love Paris' Sweatshirt After 'Airline Loses All [My] Luggage'

Nicky Hilton Forced to Borrow Paris' 'I Love Paris' Sweatshirt After 'Airline Loses All [My] Luggage'

Nicky Hilton Rothschild's luggage got lost, but luckily she has an incredible closet to shop: Sister Paris Hilton's!

Kate Middleton dành một ngày bên bờ nước ở London, cùng với Jennifer Lopez, Julianne Hough và hơn thế nữa

Kate Middleton dành một ngày bên bờ nước ở London, cùng với Jennifer Lopez, Julianne Hough và hơn thế nữa

Kate Middleton dành một ngày bên bờ nước ở London, cùng với Jennifer Lopez, Julianne Hough và hơn thế nữa. Từ Hollywood đến New York và mọi nơi ở giữa, hãy xem các ngôi sao yêu thích của bạn đang làm gì!

17 tuổi bị đâm chết trong khi 4 người khác bị thương trong một cuộc tấn công bằng dao trên sông Wisconsin

17 tuổi bị đâm chết trong khi 4 người khác bị thương trong một cuộc tấn công bằng dao trên sông Wisconsin

Các nhà điều tra đang xem xét liệu nhóm và nghi phạm có biết nhau trước vụ tấn công hay không

Tôi viết như thế nào

Tôi viết như thế nào

Đối với tôi, mọi thứ là về dòng đầu tiên đó và nó sẽ đưa bạn đến đâu. Một số nhà văn bị điều khiển bởi cốt truyện, sự sắp xếp tinh tế của các quân cờ, trong khi những người khác bị lôi cuốn bởi một nhân vật và khả năng thực hiện một cuộc hành trình với một người bạn hư cấu mới.

Đường băng hạ cánh

Đường băng hạ cánh

Cuối hè đầu thu là mùa hoài niệm. Những chiếc đèn đường chiếu ánh sáng của chúng qua những con đường đẫm mưa, và những chiếc lá dưới chân - màu đỏ cam tắt trong bóng chạng vạng - là lời nhắc nhở về những ngày đã qua.

Hãy tưởng tượng tạo ra một chiến lược nội dung thực sự CHUYỂN ĐỔI. Nó có thể.

Hãy tưởng tượng tạo ra một chiến lược nội dung thực sự CHUYỂN ĐỔI. Nó có thể.

Vào năm 2021, tôi khuyến khích bạn suy nghĩ lại mọi thứ bạn biết về khách hàng mà bạn phục vụ và những câu chuyện bạn kể cho họ. Lùi lại.

Sự mất mát của voi ma mút đã mở ra trái tim tôi để yêu

Sự mất mát của voi ma mút đã mở ra trái tim tôi để yêu

Vào ngày sinh nhật thứ 9 của Felix The Cat, tôi nhớ về một trong những mất mát lớn nhất trong cuộc đời trưởng thành của tôi - Sophie của tôi vào năm 2013. Tôi đã viết bài luận này và chia sẻ nó trên nền tảng này một thời gian ngắn vào năm 2013.

Language