java.lang.nosuchmethodexception: com.sun.proxy. $ proxy58.List ข้อผิดพลาด
มีข้อยกเว้นที่ไม่คาดคิดอยู่เสมอเมื่อเล่น SSH บนเว็บ มีหลายสิ่งที่คุณไม่ระวังหรือประมาท ดังนั้นการแก้ปัญหาจะแตกต่างกัน วิธีแก้ปัญหาที่คนอื่นพบอาจไม่ถูกต้องสำหรับคุณ เช่นเดียวกับข้อยกเว้นที่ฉันรายงานข้างต้นฉันใช้ Baidu มาหลายครั้งแล้วและคำตอบที่ฉันให้ฉันนั้นไม่มีอะไรมากไปกว่าการเพิ่มประโยคให้กับ AOP แต่ฉันเสียใจมากฉันเพิ่มมันลงในสิ่งที่ไม่ถูกต้อง! ดังนั้นสิ่งเดียวกันก็เป็นจริงคุณยังต้องแก้ปัญหาความผิดปกติของคุณเอง
ก่อนอื่นให้ฉันอธิบายโครงสร้าง SSH และเหตุผลสำหรับข้อยกเว้นในการปฏิบัติของฉันในครั้งนี้
เฟรมเวิร์กประเภท struts2.2+hibernate4.2+spring4.0, ห้องคอนเทนเนอร์ tomcat7.0 ในการดำเนินการฉันเขียน baseaction คลาสพื้นฐาน, การกระทำที่สืบทอดมาและดำเนินการอินเทอร์เฟซ ModelDriven รหัสมีดังนี้:
----------@component@transactional ---------- คลาสนามธรรมสาธารณะ Baseaction <t> ขยายการดำเนินการ acponsupport modeldriven <t> {ส่วนตัวคงที่สุดท้าย Long Serialversionuid = 271968501307297741L; @Resource (name = "RoleserViceImpl") บทบาทการป้องกันบทบาท; @Resource (NAME = "แผนกบริการ") แผนกบริการที่ได้รับการคุ้มครองแผนกบริการ; @Resource (name = "userservice") ผู้ใช้ userservice ที่ได้รับการป้องกัน; แบบจำลองที่ได้รับการป้องกัน public baseaction () {parameterizedType pt = (parameterizedType) this.getClass (). getGenericsuperclass (); @suppresswarnings ("ไม่ได้ตรวจสอบ") คลาส <t> clazz = (คลาส <t>) pt.getactualtypearguments () [0]; ลอง {model = clazz.newinstance (); } catch (exception e) {โยน runtimeException ใหม่ (e); }} สาธารณะ t getModel () {รุ่น return; - ข้อได้เปรียบของสิ่งนี้คือการกระทำที่สอดคล้องกันของแต่ละองค์ประกอบจำเป็นต้องบอก baseaction ว่ายาชื่อสามัญเพื่อนำไปใช้และจากนั้นจำเป็นต้องทำให้ตรรกะของตัวเองเสร็จสมบูรณ์เท่านั้น สำหรับการดำเนินการแต่ละครั้งเพื่อดำเนินการ ActionsUpport นี่เป็นโซลูชันพื้นฐานและง่ายต่อการคิด
จากนั้นในแต่ละการกระทำองค์ประกอบของบริการจะถูกเรียกให้ใช้ฟังก์ชั่นของตัวเอง ในการดำเนินการแต่ละครั้งจะใช้คำอธิบายประกอบที่ใช้คำอธิบายประกอบคำอธิบายประกอบคำอธิบายประกอบ อย่างไรก็ตามเมื่อคุณฝึกการทดสอบแล้ว java.lang.nosuchmethodexception: com.sun.proxy. $ proxy58.list () จะปรากฏขึ้น หลังจากตรวจสอบพบว่าเหตุผลคือ:
Baseaction เป็นนามธรรมมันไม่สมเหตุสมผลที่จะเพิ่ม @Transactional
@Transactional ได้รับการจัดการโดยฤดูใบไม้ผลิ วัตถุที่จัดการโดยฤดูใบไม้ผลิจะต้องสร้างเป็นตัวแทน สำหรับคลาสนามธรรมมันไม่สามารถใหม่ในวัตถุได้ เฉพาะคลาสการใช้งานคอนกรีตของคลาสนามธรรมเท่านั้นที่สามารถ proxyed ในฤดูใบไม้ผลิ
ดังนั้นการลบ @Transactional บน baseaction เป็นเหตุผลสำหรับคำถามนี้
ขอบคุณสำหรับการอ่านฉันหวังว่ามันจะช่วยคุณได้ ขอบคุณสำหรับการสนับสนุนเว็บไซต์นี้!