WELD-000072 Managed bean ที่ประกาศขอบเขตการพาสซีฟต้องสามารถส่งผ่านได้


90

ฉันเขียนโปรแกรมง่ายๆในเว็บฟอร์ม java แต่ฉันได้รับข้อผิดพลาดต่อไปนี้:

WELD-000072 ถั่วที่มีการจัดการที่ประกาศขอบเขตการส่งผ่านจะต้องสามารถส่งผ่านได้ Bean: Managed Bean [คลาสBeanPakage.DemoBeans] ที่มีคุณสมบัติ [ @Any @Default @Named]

ใครช่วยบอกทีว่าข้อผิดพลาดนี้มาจากไหน

import javax.enterprise.context.SessionScoped;
import javax.inject.Named;


@Named("DemoBeans")
@SessionScoped
public class DemoBeans {

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

คำตอบ:


175

คุณสามารถทำให้ bean passivation ได้โดยใช้อินเทอร์เฟซต่อเนื่อง:

public class DemoBean implements Serializable { ... }

โปรดทราบว่ามีข้อกำหนดเพิ่มเติมสำหรับความสามารถในการทู่ โปรดดูเอกสาร Weld สำหรับข้อมูลเพิ่มเติม


21

ข้อผิดพลาดอาจยังคงอยู่แม้ว่า CDI bean จะต่ออนุกรมได้:

WELD-000072 Managed bean declaring a passivating scope must be passivation capable

ตัวอย่างชั้นเรียน:

@Named
@ConversationScoped
public class TransactionMatchController implements Serializable {
    ...
}

ตรวจสอบให้แน่ใจว่า@Interceptorsทั้งหมดสามารถ seial ได้เช่นกัน:

@Interceptor
@Transactional
public class TransactionInterceptor implements Serializable {
    ...
}

ขอบคุณการทำให้@Interceptorsเป็นอนุกรมเป็นปัญหาสำหรับฉัน!
Anthony O


6

ทำให้เป็นDemoBeans อนุกรม

@Named("DemoBeans")
@SessionScoped
public class DemoBeans  implements Serializable
{

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

2

นอกจากนี้คุณยังสามารถเปิดใช้งานพฤติกรรมทู่ของถั่วของคุณด้วยคำอธิบายประกอบ:

@Stateful (passivationCapable = จริง)

ในกรณีนี้คุณไม่จำเป็นต้องใช้อินเทอร์เฟซแบบอนุกรมได้

ความนับถือ. Jorge


1

ตรวจสอบการนำเข้า

(บางครั้ง netbeans ใช้คนอื่นจากห้องสมุดอื่น)

ตัวอย่าง. นำเข้า javax.faces.view.ViewScoped; เปลี่ยนโดย import javax.faces.bean.ViewScoped;


จริงๆแล้ว JSF 2.3 เลิกใช้javax.faces.bean.ViewScopedเพื่อสนับสนุนjavax.faces.view.ViewScoped. นี่หมายความว่าฉันต้องผ่านมุมมองของถั่วที่มีขอบเขตทั้งหมดและทำให้มันต่อเนื่องกันได้หรือไม่? จากjavax.faces.bean.ViewScopedjavadoc: @deprecated This has been replaced by {@code javax.faces.view.ViewScoped}. The functionality of this corresponding annotation is identical to this one, but it is implemented as a CDI custom scope.
Vasil Svetoslavov

0

เกิดจาก: org.jboss.weld.exceptions.DeploymentException: WELD-000072: Bean ที่ประกาศขอบเขตการพาสซีฟต้องสามารถพาสซีฟได้ Bean: Managed Bean [คลาส com.marcos.controller.PersonaBean] ที่มีคุณสมบัติ [@Default @Named @Any]


ฉันแก้ไขแล้วเห็นได้ชัดว่า CDI ฉันไม่รู้จักถั่วฉันเพิ่งทำให้มันชัดเจนขึ้น

@Named
@ViewScoped
public class PersonaBean  implements Serializable {
@Inject
private IPersonaService service;
public void registrar() {

    try {
        service.registrar(null);

    }catch (Exception e) {
        e.printStackTrace();
    }
  }
}

ทางออกสำหรับฉัน:

@Named ("PersonaBean")
@ViewScoped
public class PersonaBean  implements Serializable {
@Inject
private IPersonaService service;
public void registrar() {

    try {
        service.registrar(null);

    }catch (Exception e) {
        e.printStackTrace();
    }
  }
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.