บันทึกครั้งแรกโดยใช้ JFINAL ตั้งแต่การก่อสร้างเฟรมเวิร์กอย่างง่ายไปจนถึงการเพิ่มการลบการดัดแปลงและการตรวจสอบจากวิธีการในตัวไปจนถึงการใช้เฟรมเวิร์กปกติ
เว็บไซต์อย่างเป็นทางการของ Jfinal: http://www.jfinal.com/
Jfinal เป็นเฟรมเวิร์กเว็บ + ORM ที่รวดเร็วตามภาษา Java เป้าหมายการออกแบบหลักของมันคือการพัฒนาอย่างรวดเร็วปริมาณรหัสเล็กการเรียนรู้ที่เรียบง่ายฟังก์ชั่นที่ทรงพลังน้ำหนักเบาขยายง่ายและพักผ่อน ในขณะที่มีข้อได้เปรียบทั้งหมดของ Java แต่ก็มีประสิทธิภาพการพัฒนาของภาษาแบบไดนามิกเช่น Ruby, Python และ PHP
Jfinal มีคุณสมบัติหลักดังต่อไปนี้:
สถาปัตยกรรม MVC การออกแบบที่ยอดเยี่ยมและการใช้งานง่าย ๆ
ปฏิบัติตามหลักการ COC, การกำหนดค่าศูนย์, ไม่มี XML
โหมดบันทึก DB + ดั้งเดิมมีความยืดหยุ่นและสะดวกสบาย
การสนับสนุน Activerecord ทำให้การพัฒนาฐานข้อมูลอย่างรวดเร็วมาก
โหลดไฟล์ Java ที่แก้ไขโดยอัตโนมัติไม่จำเป็นต้องรีสตาร์ทเว็บเซิร์ฟเวอร์ในระหว่างการพัฒนา
AOP รองรับการกำหนดค่า Interceptor ที่ยืดหยุ่นและฟังก์ชั่นที่ทรงพลัง
สถาปัตยกรรมปลั๊กอินความยืดหยุ่นที่แข็งแกร่ง
การสนับสนุนหลายมุมมอง, freemarker, jsp, ความเร็ว
ฟังก์ชั่นการตรวจสอบแบ็กเอนด์ที่มีประสิทธิภาพ
ฟังก์ชั่นอย่างเต็มที่พร้อมฟังก์ชั่นส่วนใหญ่ของ struts2
ขนาดเล็กเพียง 632K และไม่มีการพึ่งพาบุคคลที่สาม
ตัวอย่าง:
ฉันใช้ Maven ก่อนอื่นสร้างโครงการ Maven:
หลังจากสร้างโครงการของฉันแล้วฉันต้องตั้งค่าไว้ก่อน:
จากนั้นคลิกใช้
มีการตั้งค่าอื่น ๆ ฯลฯ คำถามของฉันถูกข้ามที่นี่
จากนั้นแนะนำแพ็คเกจ jar ใน pom.xml:
แพ็คเกจ Maven Search Jar: http://mvnrepository.com/
การสาธิตอย่างเป็นทางการ pom.xml:
JSON ไม่ได้แนะนำที่นี่วิธีการสาธิตสุดท้ายของฉันต้องใช้ JSON
<Project xmlns = "http://maven.apache.org/pom/4.0.0" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xsi: schemalocation = "http:/MANCMMMMMMMMMMMMMMMMMMMMMMMMMMBM http://maven.apache.org/maven-v4_0_0.xsd "> <moderVersion> 4.0.0 </modelversion> <roupid> com.demo </groupId> <ratifactid> jfinal_demo_for_maven </artifactid> <packaging> <name> jfinal_demo_for_maven maven webapp </name> <url> http://maven.apache.org </url> <properties> <project.build.sourceencoding> utf-8 </project.build.sourceencoding> <Maven.Compiler.Encoding> UTF-8 </Maven.Compiler.Encoding> </premerties> <!-การใช้ไลบรารี Alibaba Maven-> <ที่เก็บ> <ที่เก็บ> <id> Ali-Maven </id> <url> http://maven.aliyun.com/nexus/content/groups/public </url> <releases> <enabled> True </enabled> </releases> </repository> </repository> </repository> <!-เพิ่มที่เก็บสแน็ปช็อต updatePolicy: เสมอ, ทุกวัน, ช่วงเวลา, ไม่เคย-> <!-ที่เก็บ> <ที่เก็บ> <id> sonatype-nexus-snapshots </id> <name> sonatype nexus snapshots <url> https://oss.sonatype.org/content/repositories/snapshots/ </url> <releases> <enabled> false </enabled> </releases> </repository> </repository> </repository> </repository> </repository> </repository> </repository> </repository> </repository> </repository> </repository> </repository> </repository> </repository> </repository> </repository> </repository> </repository> </repository> </repository> </repository> </repository> </repository> </repository> </repository> </repository> </repository> </repository> </repository> </repository> </repository> </repository> </repository> </repository> </repository> </repository> </repository> <ArtIfactId> Jetty-Server </artifactid> <sersion> 8.1.8 </Sersion> <!-ค่าขอบเขตที่นี่คือการคอมไพล์ มันจะต้องมีการเปลี่ยนแปลงเพื่อให้ได้เมื่อเริ่มโครงการภายใต้แนวคิดเพื่อเริ่มต้นแพ็คเกจสงครามเพื่อหลีกเลี่ยงการขว้างขวดที่ไร้ประโยชน์บางอย่างใน -> <pope> คอมไพล์ </scope> </predency> <predency> <roupid> com.jfinal </groupid> <ArtIfactId> log4j </artifactId> <persion> 1.2.16 </เวอร์ชัน> </การพึ่งพา> <การพึ่งพา> <roupId> mysql </groupId> <ratifactid> mysql-connector-java </artifactid> <version> 5.1.44 <ArtIfactId> DRUID </artIfactId> <persion> 1.0.29 </version> </การพึ่งพา> <การพึ่งพา> <roupId> com.jfinal </groupId> <ratifactid> cos </artifactid> <persion> 2017.5 </เวอร์ชัน> <RoupID> org.mortbay.jetty </groupid> <ratifactid> Jetty-Maven-Plugin </artifactid> <sersion> 8.1.8.v20121106 </เวอร์ชัน> <การกำหนดค่า> <stopkey> หยุด </stopkey> <ScanIntervalseconds> 5 </scanIntervalseconds> <การเชื่อมต่อ> <การใช้งานตัวเชื่อมต่อ = "org.eclipse.jetty.server.nio.selectChannelConnector"> </090 </พอร์ต> <maxidletime> 60000 </build> </project>
จากนั้นมีการกำหนดค่าของ web.xml:
สังเกต:
แพ็คเกจที่ไฟล์ democonfig.java อยู่และชื่อไฟล์ของตัวเองจะต้องสอดคล้องกับการกำหนดค่าในแท็กค่าพารามิเตอร์ใน web.xml (ในกรณีนี้การกำหนดค่าคือ demo.democonfig)
<silter> <filter-name> jfinal </filter-name> <silter-class> com.jfinal.core.jfinalfilter </filter-class> <init-Param> -value> demo.democonfig </param-value> </init-param> </filter> <filter-mapping> <filter-name> jfinal </filter-name> <url-pattern>/*</url-pattern>
ถัดไปสร้างไฟล์ Java:
สร้าง democonfig และสืบทอด JfinalConfig democonfig เป็นไฟล์หลัก เรียกใช้ไฟล์นี้เพื่อเริ่มโครงการเช่นเดียวกับการเรียกใช้ไฟล์ Java ปกติ หากคุณแก้ไขรหัสอื่น ๆ หลังจากทำงานในเวลาเดียวกันคุณไม่จำเป็นต้องรีสตาร์ท เฟรมเวิร์กจะได้รับการแก้ไขโดยอัตโนมัติ คุณสามารถรีเฟรชโดยตรงเพื่อดูเนื้อหาที่แก้ไข
นี่คือการสาธิตง่ายๆครั้งแรก:
แพ็คเกจตัวอย่าง; นำเข้า com.jfinal.config.*; democonfig คลาสสาธารณะขยาย jfinalconfig {โมฆะสาธารณะ configconstant (ค่าคงที่ฉัน) {me.setDevMode (จริง);} โมฆะสาธารณะ configroute (เส้นทางฉัน) {me.add ("/hello", hellocontroller configPlugin (ปลั๊กอินฉัน) {} โมฆะสาธารณะ configInterceptor (interceptors me) {} โมฆะสาธารณะ confighandler (handlers me) {}}จากนั้นกำหนดค่าคอนโทรลเลอร์:
การสาธิตแพ็คเกจ; นำเข้า com.jfinal.core.controller; ชั้นเรียนสาธารณะ Hellocontroller ขยายคอนโทรลเลอร์ {ดัชนีโมฆะสาธารณะ () {renderText ("Hello Jfinal World");}}}จากนั้นเปิดเบราว์เซอร์และป้อน http: // localhost/hello โดยตรงและคุณจะเห็นว่าหน้าเอาต์พุต Hello Jfinal World
นี่คือตัวอย่างพื้นฐานที่สุดของการใช้มันนี่คือโปรแกรมของฉัน:
แพ็คเกจตัวอย่าง; นำเข้า com.jfinal.config.*; นำเข้า com.jfinal.core.jfinal; นำเข้า com.jfinal.kit.propkit; นำเข้า com.jfinal.plugin.activecord.activerecordplugin; นำเข้า com.jfinal.plugin.c3p0.c3p0plugin; com.jfinal.template.engine; Import Controller.studentController; นำเข้า demo.model.classes; นำเข้า demo.model.student; democonfig ชั้นเรียนสาธารณะขยาย jfinalconfig {โมฆะคงที่สาธารณะ } โมฆะสาธารณะ configConstant (ค่าคงที่ฉัน) {me.setDevMode (จริง); // วิธีนี้ใช้ในการกำหนดค่าค่าคงที่ JFinal เช่นการกำหนดค่าของโหมดการพัฒนาค่าคงที่ devmode, รหัสต่อไปนี้กำหนดค่า jfinal // ทำงานในโหมดการพัฒนา: ในโหมดการพัฒนา jfinal รายงานเอาต์พุตสำหรับแต่ละคำขอเช่นการส่ง URL, คอนโทรลเลอร์, เมธอด // และพารามิเตอร์ที่ดำเนินการตามคำขอ } โมฆะสาธารณะ configroute (เส้นทางฉัน) {me.add ("/", hellocontroller.class); me.add ("/test/mytest", hellocontroller.class, "test"); me.add ("/นักเรียน", StudentController.class); //me.add("/classes ", classescontroller.class); } โมฆะสาธารณะ configEngine (Engine ME) {} โมฆะสาธารณะ configplugin (ปลั๊กอินฉัน) {// c3p0plugin cp = ใหม่ c3p0plugin ("jdbc: mysql: // localhost/db_name", // "username", "รหัสผ่าน"); LoadPropertyFile ("A_LITTLE_CONFIG.txt"); druidplugin dp = ใหม่ druidplugin (getProperty ("jdbcurl"), getProperty ("ผู้ใช้"), getProperty ("รหัสผ่าน")); me.add (dp); Activerecordplugin ARP = ใหม่ activerecordplugin (DP); Me.add (ARP); arp.addmapping ("นักเรียน", "studentid", นักเรียน. คลาส); arp.addmapping ("คลาส", "classesid", classes.class); // วิธีนี้ใช้ในการกำหนดค่าปลั๊กอินของ JFINAL รหัสต่อไปนี้กำหนดค่าปลั๊กอินการเชื่อมต่อฐานข้อมูล DRUID และปลั๊กอิน Activerecord // ปลั๊กอินการเข้าถึงฐานข้อมูล ด้วยการกำหนดค่าต่อไปนี้มันสะดวกมากในการใช้งานฐานข้อมูลในแอปพลิเคชันของคุณโดยใช้ activerecord } public void configinterceptor (interceptors me) {//me.add( ใหม่ Authinterceptor ()); // วิธีนี้ใช้เพื่อกำหนดค่าสกัดกั้นทั่วโลกของ JFINAL สกัดกั้นทั่วโลกจะสกัดกั้นคำขอการกระทำทั้งหมดเว้นแต่จะถูกล้างในคอนโทรลเลอร์โดยใช้ // @clear รหัสต่อไปนี้กำหนดค่าตัวดักชื่อชื่อ Authinterceptor } โมฆะสาธารณะ confighandler (handlers me) {}}คำอธิบายง่ายๆของแต่ละวิธีที่นี่เขียนไว้ในความคิดเห็น
จากนั้นมีคอนโทรลเลอร์:
แม้ว่าจะมีการประกาศบริการที่นี่ แต่ก็ไม่ได้ใช้ มันถูกใช้โดยตรงในวิธีการควบคุม
แพ็คเกจคอนโทรลเลอร์; นำเข้า java.util.list; นำเข้า java.util.map นำเข้า com.alibaba.fastjson.jsonobject; นำเข้า com.jfinal.aop.before; นำเข้า com.jfinal.core.controller; demo.model.student; Import Service.studentservice; StudentController ระดับสาธารณะขยายคอนโทรลเลอร์ { /*** มีหลายวิธีในการรับ studentId ซึ่งสอดคล้องกับวิธีการเขียนพารามิเตอร์ Pass Front-end คอนโทรลเลอร์ให้วิธีการ GetPara Series API อย่างเป็นทางการมีรายละเอียดมาก Jfinal ใช้คำสั่ง SQL ดั้งเดิมซึ่งง่ายและสะดวก setattr ("studentlist", รายการ); ใส่ชุดผลลัพธ์ลงในขอบเขตคำขอ Jfinal ยังมีวิธีการที่จะได้รับแบบฟอร์มโดยตรงไปยังแพ็คเกจวัตถุลงในวัตถุ getModel (student.class); นั่นคือเช่น struts2 ชื่อแบบฟอร์มสอดคล้องกับซึ่งสะดวกมากในการเพิ่ม, studentid student.set ("studentId", "mysequence.nextval") บันทึก (); Jfinal มีหลายวิธีในการส่งคืนและยังสามารถส่งคืนข้อมูล JSON วิธีการเรนเดอร์มีรายละเอียดมากใน API*/ Static Studentservice Service = New Studentservice (); @Before (StudentInterceptor.class) ดัชนีโมฆะสาธารณะ () {รายการ <student> list = student.dao.find ("เลือก * จากนักเรียน"); setattr ("studentlist", รายการ); // โปรดทราบว่าหากเส้นทางด้านล่างมี/เริ่มดูจากไดเรกทอรีรากนั่นคือรหัส = render ("/student/index.html"); render ("index.html"); } โมฆะสาธารณะเพิ่ม () {render ("add.html"); } การทดสอบโมฆะสาธารณะ () {รายการ <student> list = student.dao.find ("เลือก * จากนักเรียน"); setattr ("studentlist", รายการ); setattr ("นักเรียน", list.get (0)); render ("test.jsp"); } โมฆะสาธารณะ getList () {รายการ <student> list = student.dao.find ("เลือก * จากนักเรียน"); jsonObject jo = new JsonObject (); jo.put ("รหัส", 0); jo.put ("msg", true); jo.put ("count", list.size ()); jo.put ("ข้อมูล", รายการ); Renderjson (Jo); } โมฆะสาธารณะ layui () {รายการ <student> list = student.dao.find ("เลือก * จากนักเรียน"); setattr ("studentlist", รายการ); render ("index3.html"); } โมฆะสาธารณะ delete () {// รับค่าของชื่อโดเมนฟอร์มชื่อนักเรียน student.dao.deletebyid (getPara ("studentId")); ForwardAction ("/นักเรียน"); } โมฆะสาธารณะ DELETE1 () {// รับค่าแรกใน URL Request Student.dao.deleteById (getParatoint ()); ForwardAction ("/นักเรียน"); } การอัปเดตโมฆะสาธารณะ () {นักเรียนนักเรียน = getModel (student.class); นักเรียน. update (); ForwardAction ("/นักเรียน"); } โมฆะสาธารณะ get () {นักเรียนนักเรียน = student.dao.findbyid (getPara ("studentId")); setattr ("นักเรียน", นักเรียน); render ("index2.html"); } โมฆะสาธารณะ get1 () {นักเรียนนักเรียน = student.dao.findbyid (getParatoint ()); setattr ("นักเรียน", นักเรียน); render ("index2.html"); } @Before (StudentValidator.class) โมฆะสาธารณะบันทึก () { /*** getModel ใช้เพื่อรับวัตถุโมเดลที่ส่งผ่านจากฟิลด์ฟอร์มหน้า ชื่อฟิลด์ฟอร์มมีชื่อว่า "modelname.attrname" http://www.jfinal.com attrName ที่ใช้โดย GetModel จะต้องเหมือนกับชื่อฟิลด์ตารางข้อมูล วิธีการของ GetBean ใช้เพื่อรองรับถั่วชวาแบบดั้งเดิมรวมถึงรุ่นที่ใช้เครื่องกำเนิด JFNAL เพื่อสร้างวิธีการ getter และ setter เมื่อผ่านอาร์กิวเมนต์ในแบบฟอร์มหน้าให้ใช้ชื่อ attrName ที่สอดคล้องกับวิธีการตั้งค่าแทนที่จะเป็นชื่อฟิลด์ตารางข้อมูล ความแตกต่างระหว่าง GetModel และ GetBean คืออดีตใช้ชื่อฟิลด์ตารางตัวเลขและหลังใช้ชื่อแอตทริบิวต์ที่สอดคล้องกับวิธีการตั้งค่าสำหรับการฉีดข้อมูล ขอแนะนำให้ใช้วิธี GetBean ก่อน */// getBean (student.class) .save (); getModel (student.class) .save (); เปลี่ยนเส้นทาง ("/นักเรียน"); } @Before (StudentValidator2.class) โมฆะสาธารณะ SaveBean () {getBean (student.class) .save (); เปลี่ยนเส้นทาง ("/นักเรียน"); -คำอธิบายง่าย ๆ เดียวกันก็เขียนไว้ในความคิดเห็น
วิธีการโดยทั่วไปทั้งหมดที่นี่นี่คือการกำหนดค่าอื่น ๆ :
นี่คือคลาสเอนทิตี:
แพ็คเกจ demo.model; นำเข้า com.jfinal.plugin.activecord.model; นักเรียนชั้นสาธารณะขยายโมเดล <student> {นักเรียนคงสุดท้าย Dao = นักศึกษาใหม่ (); /*** Activerecord เป็นหนึ่งในองค์ประกอบหลักที่สุดของ Jfinal การใช้งานฐานข้อมูลผ่าน Activerecord จะลดจำนวนรหัสและปรับปรุงประสิทธิภาพการพัฒนาอย่างมาก การกำหนดค่าอยู่ด้านหลัง ฉันใช้โมเดลที่นี่ โมเดลเป็นหนึ่งในองค์ประกอบที่สำคัญที่สุดใน Activerecord ซึ่งทำหน้าที่เป็นส่วนโมเดลในโหมด MVC ผู้ใช้ในรหัสข้างต้นทันทีมีวิธีการที่สะดวกมากมายในการใช้งานฐานข้อมูลโดยสืบทอดโมเดล วัตถุ DAO Static ที่ประกาศไว้ในผู้ใช้ถูกกำหนดเพื่อความสะดวกในการดำเนินการแบบสอบถามและไม่จำเป็นต้องใช้วัตถุ แบบจำลองที่ใช้ activerecord ไม่จำเป็นต้องกำหนดคุณลักษณะ, getters และวิธีการตั้งค่าการกำหนดค่า XML และการกำหนดค่าคำอธิบายประกอบซึ่งลดจำนวนรหัสอย่างมาก วิธีการทั่วไปของแบบจำลองพบได้ใน API อย่างเป็นทางการ JFINAL ยังมีโหมด DB + Record ดั้งเดิมคลาส DB และคลาสระเบียนประกอบซึ่งให้ฟังก์ชั่นการทำงานฐานข้อมูลที่สมบูรณ์ยิ่งขึ้นนอกคลาสรุ่น เมื่อใช้คลาส DB และบันทึกไม่จำเป็นต้องแมปตารางฐานข้อมูลและบันทึกเทียบเท่ากับโมเดลทั่วไป วิธีการ db ทั่วไปพบได้ใน API อย่างเป็นทางการ -StudentValidator:
Package studentvalidator; นำเข้า com.jfinal.core.controller; นำเข้า com.jfinal.validate.validator; นักศึกษาระดับสาธารณะ controller.render ("/add.html"); } @Override Void Protected Validate (คอนโทรลเลอร์คอนโทรลเลอร์) {// ตรวจสอบชื่อฟิลด์ฟอร์ม, ส่งคืนคีย์ข้อมูล, ส่งคืนค่าข้อมูล ValidaterequiredString ("Student.studentName", "StudentNamemsg", "โปรดป้อนชื่อนักเรียน!"); - Package studentvalidator; นำเข้า com.jfinal.core.controller; นำเข้า com.jfinal.validate.validator; นักศึกษาระดับสาธารณะ controller.render ("/add.html"); } @Override Void Protected Validate (คอนโทรลเลอร์คอนโทรลเลอร์) {// ตรวจสอบชื่อฟิลด์ฟอร์ม, ส่งคืนคีย์ข้อมูล, ส่งคืนค่าข้อมูล ValidaterequiredString ("studentName", "studentnamemsg", "โปรดป้อนชื่อนักเรียน!"); -StudentInterceptor:
Package studentInterceptor; นำเข้า com.jfinal.aop.interceptor; นำเข้า com.jfinal.aop.invocation; ชั้นเรียนการศึกษาระดับสาธารณะใช้การสกัดกั้น {การสกัดกั้นโมฆะสาธารณะ (การเรียกใช้ AI) {System.out.println ("ก่อนการดำเนินการเรียกใช้"); ai.invoke (); System.out.println ("After Action Action"); -จากนั้นหน้าจอแสดงผลแผนกต้อนรับ:
เกี่ยวกับหน้าแผนกต้อนรับคุณต้องดูบทที่หกของเอกสารเนื้อหาของเอ็นจิ้นเทมเพลต JFINAL และเข้าใจว่า JFINAL ปรากฏตัวอย่างไรในแผนกต้อนรับ สิ่งนี้สำคัญมาก
<! doctype html> <html> <head> <meta charset = "utf-8"> <title> การจัดการนักเรียน </title> <script type = "text/javascript" src = "/jQuery-1.12.4.min.js"> </script> </head> <a href = "/student/layui"> ทดสอบ layui </a> <a href = "/นักเรียน/ทดสอบ"> แก้ไขดัชนี 0 </a> <br> <a href = "/นักเรียน/เพิ่ม"> เพิ่ม </a> <br> <form action = "/get"> id: < href = "/นักเรียน/ลบ"> ลบ </a> <form action = "/student/delete"> id: <input type = "text" name = "studentId"> <อินพุต type = "submit" value = "delete"> </form> #for (x: [1..10]) #(x) # <th> เพศ </th> <th> อายุ </th> <th> ที่อยู่ </th> <th> อีเมล </th> <th> การดำเนินการ </th> </tr> #for (x: studentlist) <tr> <td style = "text-align: left;">#(x.studentId) </td> style = "text-allign: left;">#(x.sex) </td> <td style = "text-allign: left;">#(x.age) </td> <td style = "text-allign: left;">#(x.address) </td> <td style = " style = "text-allign: left;"> <a href = "/นักเรียน/ลบ? studentId =#(x.studentid)"> ลบ </a> <a href = "/นักเรียน/delete1/#(x.studentid)" delete </a> <a href = "/นักเรียน href = "/student/get1/#(x.studentId)"> แก้ไข </a> <a href = "/นักเรียน/get1/#(x.studentId)"> แก้ไข </a> </td> </tr> #end </tbody>
นี่คือเอฟเฟกต์หน้าเนื่องจากไม่มีสไตล์มันดูหยาบ จากนั้นต่อไปนี้ประกอบด้วยการใช้งานปกติของ layui และวิธีการเป็นนิสัยปกติในการส่งคืนข้อมูล:
<! doctype html> <html> <head> <meta charset = "utf-8"> <title> การจัดการนักเรียน layui </title> <script type = "text/javascript" src = "/layui-v2.2.45/layui/layui.js" href = "/layui-v2.2.45/layui/css/layui.css" media = "ทั้งหมด"> </head> <body> <div style = "margin: 0px; พื้นหลัง-สี: สีขาว; Aria-hidden = "true"> </i> เพิ่ม </button> </a> <form style = "float: ขวา;" onsubmit = "return false"> <div> ค้นหาผู้ใช้: <div> <input name = "name" id = "demoreload" autocomplete = "ปิด"> </div> <button style = "transform: translatey (-3px);" data-type = "โหลดใหม่"> ค้นหา </button> </div> </div> </form> </blockquote> </div> <table lay-data = "{url: '/นักเรียน/getlist', id: 'idtest', ความสูง: 'full-60',}" lay-filter = "demo" ความกว้าง: '20%',} "> id </th> <th lay-data =" field:' studentName ', ความกว้าง: '20%'} "> ชื่อ </th> <th lay-data =" field: 'เพศ', ความกว้าง: '20%'} lay-data = "{ฟิลด์: 'ที่อยู่', ความกว้าง: '20%'}"> ที่อยู่ </th> <th lay-data = "{แก้ไข:' ขวา ', ความกว้าง: '17%', จัดตำแหน่ง: 'center', toolbar: '#bardemo1'}"> id = "แก้ไข" lay-event = "แก้ไข"> แก้ไข </a> <a lay-event = "del"> delete </a> </a> </script> </body> <script> layui.use ('table', function () {var table = layui.table, form = layui.form; }); // พูดแถบเครื่องมือ table.on ('เครื่องมือ (สาธิต)', ฟังก์ชั่น (obj) {var data = obj.data; ถ้า (obj.event === 'del') {layer.confirm DataType: "text", // returned function (returndata) {table.reload ("idtest"); ['380px', '80%'], เนื้อหา: "/student/get?studentid="+data.studentid, ยกเลิก: ฟังก์ชั่น (ดัชนี, layero) {layer.close (ดัชนี); $ (window) .resize (function () {layui.layer.full (ดัชนี);}) layui.layer.full (ดัชนี); url: "<%= basepath%>/sys/user/passuser", ข้อมูล: {id: data.id}, // datatype: "text", // return success: function (returndata) {layui.use ('layer', function (layer.msg (returndata.msg); // รีสตาร์ทจากหน้า 1},}); layer.alert (json.stringify (data)); table.checkstatus ('idtest'); layer.msg (checkstatus.isall? 'เลือกทั้งหมด': 'ไม่ได้เลือกทั้งหมด')}}; });}); </script> </html>สิ่งนี้ให้ความรู้สึกดีขึ้นเล็กน้อยเพราะเป็นเพียงครั้งแรกที่ฉันใช้และทำการทดสอบดังนั้นจึงยังค่อนข้างหยาบ
จากนั้นเป็นสิ่งสำคัญที่จะต้องทราบปัญหาของการส่งคืนข้อมูลด้วยวิธีนี้:
โมฆะสาธารณะ getList () {รายการ <student> list = student.dao.find ("เลือก * จากนักเรียน"); jsonObject jo = new JsonObject (); jo.put ("รหัส", 0); jo.put ("msg", true); jo.put ("count", list.size ()); jo.put ("ข้อมูล", รายการ); Renderjson (Jo); -นี่คือวิธีการชี้ไปที่ URL ตาราง layui ที่นี่คุณต้องส่งคืนข้อมูล JSON ในทาง RenderJson
จากนั้นควรสังเกตว่าฉันได้พยายามส่งคืนคอลเลกชันรายการโดยตรง ดูเหมือนว่าวิธีนี้เป็นไปได้ แต่เนื่องจากตาราง Layui ต้องอยู่ในรูปแบบข้างต้นเพื่อรับข้อมูลจึงไม่ปรากฏบนหน้า อย่างไรก็ตามเมื่อฉันส่งคืน Jo โดยตรงข้อผิดพลาดพื้นหลังที่รายงานและปัญหานี้สามารถเรียนรู้และแก้ไขได้ในวันพรุ่งนี้เท่านั้น
ต่อไปนี้มีหลายวิธีในการใช้วิธีการแสดงผลที่ส่งคืน:
จากนั้นคุณต้องให้ความสนใจกับวิธีการโทรและการถ่ายโอนพารามิเตอร์:
มีวิธีการถ่ายโอนสองวิธีและพารามิเตอร์ดังนี้:
<a href = "/นักเรียน/ลบ? studentId =#(x.studentId)"> ลบ </a> <a href = "/นักเรียน/delete1/#(x.studentid)"> ลบ </a> <a href = "/get studentid =#(x.studentid)" href = "/student/get1/#(x.studentId)"> แก้ไข </a> <a href = "/นักเรียน/get1/#(x.studentId)"> แก้ไข 1 </a>
นี่คือวิธีการควบคุม:
โมฆะสาธารณะ DELETE () {// ได้รับค่าของชื่อโดเมนแบบฟอร์ม studentId student.dao.deleteById (getPara ("studentId")); ForwardAction ("/นักเรียน"); } โมฆะสาธารณะ DELETE1 () {// รับค่าแรกใน URL Request Student.dao.deleteById (getParatoint ()); ForwardAction ("/นักเรียน"); } การอัปเดตโมฆะสาธารณะ () {นักเรียนนักเรียน = getModel (student.class); นักเรียน. update (); ForwardAction ("/นักเรียน"); } โมฆะสาธารณะ get () {นักเรียนนักเรียน = student.dao.findbyid (getPara ("studentId")); setattr ("นักเรียน", นักเรียน); render ("index2.html"); } โมฆะสาธารณะ get1 () {นักเรียนนักเรียน = student.dao.findbyid (getParatoint ()); setattr ("นักเรียน", นักเรียน); render ("index2.html"); -ในที่สุดมีสองวิธีในการเพิ่มคลาสเอนทิตีที่ยอมรับ:
@Before (StudentValidator.class) โมฆะสาธารณะบันทึก () { /*** getModel ใช้เพื่อรับวัตถุโมเดลที่ส่งผ่านจากฟิลด์ฟอร์มหน้า ชื่อฟิลด์ฟอร์มมีชื่อว่า "modelname.attrname" http://www.jfinal.com attrName ที่ใช้โดย GetModel จะต้องเหมือนกับชื่อฟิลด์ตารางข้อมูล วิธีการของ GetBean ใช้เพื่อรองรับถั่วชวาแบบดั้งเดิมรวมถึงรุ่นที่ใช้เครื่องกำเนิด JFNAL เพื่อสร้างวิธีการ getter และ setter เมื่อผ่านอาร์กิวเมนต์ในแบบฟอร์มหน้าให้ใช้ชื่อ attrName ที่สอดคล้องกับวิธีการตั้งค่าแทนที่จะเป็นชื่อฟิลด์ตารางข้อมูล ความแตกต่างระหว่าง GetModel และ GetBean คืออดีตใช้ชื่อฟิลด์ตารางตัวเลขและหลังใช้ชื่อแอตทริบิวต์ที่สอดคล้องกับวิธีการตั้งค่าสำหรับการฉีดข้อมูล ขอแนะนำให้ใช้วิธี GetBean ก่อน */// getBean (student.class) .save (); getModel (student.class) .save (); เปลี่ยนเส้นทาง ("/นักเรียน"); } @Before (StudentValidator2.class) โมฆะสาธารณะ SaveBean () {getBean (student.class) .save (); เปลี่ยนเส้นทาง ("/นักเรียน"); -วิธีการ GetBean ที่สองในการสาธิตของฉันอาจไม่ได้รับการตั้งค่าและเฉพาะ ID ที่สร้างขึ้นและไม่มีการเพิ่มข้อมูลอื่น ๆ
ถ้าจำเป็น นี่คือการสาธิตอย่างเป็นทางการ:
แพ็คเกจ com.demo.common.model; นำเข้า com.demo.common.model.base.baseblog;/** * การสาธิตนี้เป็นการแสดงออกถึงการใช้งาน Jfinal ที่ผิวเผินที่สุดเท่านั้น * ขอแนะนำให้ใช้กฎการตั้งชื่ออูฐสำหรับชื่อฟิลด์ฐานข้อมูลเพื่ออำนวยความสะดวกความสอดคล้องกับรหัส Java เช่นชื่อฟิลด์: userId */@suppresswarnings ("serial") บล็อกคลาสสาธารณะขยาย baseblog <บล็อก> {} แพ็คเกจ com.demo.common.model.base; นำเข้า com.jfinal.plugin.activecord.model; นำเข้า com.jfinal.plugin.activecord.ibean;/*** สร้างโดย jfinal ไม่ปรับเปลี่ยนไฟล์นี้ */@suppresswarnings ({"serial", "unchected"}) public public class baseblog <m ขยาย baseblog <m>> ขยายโมเดล <m> ใช้ iBean {สาธารณะ m setId (java.lang.integer id) {set ("id", id); return (m) สิ่งนี้; } สาธารณะ java.lang.integer getId () {return getint ("id"); } สาธารณะ m Settitle (java.lang.string ชื่อเรื่อง) {set ("title", ชื่อเรื่อง); return (m) สิ่งนี้; } สาธารณะ java.lang.string getTitle () {return getStr ("title"); } สาธารณะ m setContent (java.lang.string เนื้อหา) {set ("เนื้อหา", เนื้อหา); return (m) สิ่งนี้; } สาธารณะ java.lang.string getContent () {return getStr ("เนื้อหา"); -การแบ่งปันหมายเหตุการใช้งานการพัฒนาอย่างรวดเร็วของ JFINAL FAST Framework หมายเหตุคือเนื้อหาทั้งหมดที่ฉันแบ่งปันกับคุณ ฉันหวังว่าคุณจะให้ข้อมูลอ้างอิงและฉันหวังว่าคุณจะสนับสนุน wulin.com มากขึ้น