Nehmen Sie das erste Mal mit JFINAL auf, von der einfachen Rahmenkonstruktion bis hin zur Addition, Löschung, Modifikation und Inspektion von den integrierten Methoden bis hin zur Verwendung normaler Rahmenbedingungen.
JFINAL OFFIZIERUNGSWELT: http://www.jfinal.com/
JFINAL ist ein schnelles Web + Orm -Framework, das auf der Java -Sprache basiert. Seine Kernentwurfsziele sind schnelle Entwicklung, kleines Codevolumen, einfaches Lernen, leistungsstarke Funktionen, leichte, leicht zu erweitern und erholsam. Während es alle Vorteile von Java hat, hat es auch die Entwicklungseffizienz dynamischer Sprachen wie Ruby, Python und PHP.
JFINAL hat die folgenden Hauptmerkmale:
MVC -Architektur, exquisites Design und einfache Verwendung
Folgen Sie dem CoC -Prinzip, einer Nullkonfiguration, ohne XML
Original DB + Rekordmodus, flexibel und bequem
Die Unterstützung von ActiveCord macht die Datenbankentwicklung extrem schnell
Laden Sie die geänderte Java -Datei automatisch, und müssen Sie den Webserver während der Entwicklung nicht neu starten
AOP -Unterstützung, flexible Interceptor -Konfiguration und leistungsfähige Funktionen
Plugin -Architektur, starke Skalierbarkeit
Support für Multi-View, Freemarker, JSP, Geschwindigkeit
Leistungsstarke Validator -Backend -Überprüfungsfunktion
Vollständige Funktionen mit den meisten Funktionen von Struts2
Die geringe Größe beträgt nur 632 K. und keine Abhängigkeiten von Drittanbietern
Beispiel:
Ich benutze Maven zuerst und erstelle zuerst ein Maven -Projekt:
Nachdem mein Projekt erstellt wurde, muss ich es zuerst festlegen:
Klicken Sie dann auf Bewerben
Es gibt einige andere Einstellungen usw. Meine Frage wird hier übersprungen
Stellen Sie dann das JAR -Paket in pom.xml ein:
Maven Search JAR -Paket: http://mvnrepository.com/
Die offizielle Demo pom.xml:
JSON wird hier nicht vorgestellt, meine letzte Methode der Demo erfordert JSON
<project xmlns = "http://maven.apache.org/pom/4.0.0" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.demo</groupId> <artifactId>jfinal_demo_for_maven</artifactId> <packaging>war</packaging> <version>3.2</version> <Name> jfinal_demo_for_maven maven webapp </name> <url> http://maven.apache.org </url> <properties> <projekt.build.sourceEncoding> utf-8 </Project.build.SourceCoding> <maven.compiler.encoding> utf-8 </maven.compiler.encoding> </properties> <! <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> <updatePolicy>always</updatePolicy> <checksumPolicy>fail</checksumPolicy> </snapshots> </repository> </repository> </repository> <!-- Add snapshot repository, updatePolicy: always, daily, interval, never --> <!-- repositories> <repository> <id>sonatype-nexus-snapshots</id> <name>Sonatype Nexus Snapshots</name> <url>https://oss.sonatype.org/content/repositories/snapshots/</url> <releases> <enabled>false</enabled> </releases> <snapshots> <enabled>true</enabled> <updatePolicy>daily</updatePolicy> </snapshots> </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> </repository> </repository> </repository> </repository> </repository> </repository> </repository> </repository> </repository> </repository> </repository> </repository> </repository> </repository> </repository> </repository> </repository> </repository <Scope> test </scope> </abhängig> <abhängigkeit> <gruppe> com.jfinal </Groupid> <artifactID> Jetty-server </artifactid> <version> 8.1.8 </Version> <! Es muss nur geändert werden, wenn das Projekt unter der Idee gestartet wird, um das Kriegspaket zu starten, um zu vermeiden, dass einige nutzlose Gläser in -> <Scope> kompilieren </scope> </abhängig> <Deponcy> <gruppe> com.jfinal </GroupID> <artifactId> jfinal </artifactId> <version> 3.3 </Version> </vgl. <artifactId> log4j </artifactId> <version> 1.2.16 </Version> </abhängig> <depeopcy> <Groupid> Mysql </Groupid> <artifactId> mysql-connector-java </artifactId> <version> 5.1.44 </Version> </vgl. <artifactId>druid</artifactId> <version>1.0.29</version> </dependency> <dependency> <groupId>com.jfinal</groupId> <artifactId>cos</artifactId> <version>2017.5</version> </dependency> </dependencies> <build> <finalName>jfinal_demo_for_maven</finalName> <plugins> <groupId>org.mortbay.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>8.1.8.v20121106</version> <configuration> <stopKey>stop</stopKey> <stopPort>5599</stopPort> <webAppConfig> <contextPath>/</contextPath> </webAppConfig> <scanIntervalSeconds>5</scanIntervalSeconds> <connectors> <connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector"> <port>80</port> <maxIdleTime>60000</maxIdleTime> </connector> </connector> </configuration> </plugin> </plugins> </build> </project>
Dann gibt es die Konfiguration von web.xml:
Beachten:
Das Paket, in dem sich die Datei deconfig.java und ein eigener Dateinamen befindet, muss mit der Konfiguration im Param-Wert-Tag in web.xml übereinstimmen (in diesem Fall ist die Konfiguration Demo.Democonfig).
<Filter> <filter-name> jfinal </filter-name> <filter-class> com.jfinal.core.jfinalfilter </filter-classe> <init-param> <param-name> configclass </param-name> <param -Value> Demo.Democonfig </param-value> </init-param> </filter> <Filter-Mapping> <Filter-name> jfinal </filter-name> <url-puftern>/*</urlpattern> </filter-mapping>
Erstellen Sie als nächstes die Java -Datei:
Erstellen Sie Demokonfig und Erbe JfinalConfig. Democonfig ist die Hauptdatei. Führen Sie diese Datei aus, um das Projekt zu starten, genau wie das Ausführen der normalen Java -Datei Main. Wenn Sie andere Codes nach dem gleichzeitigen Ausführen ändern, müssen Sie nicht neu starten. Das Framework wird automatisch geändert. Sie können direkt aktualisiert, um den geänderten Inhalt anzuzeigen.
Hier ist die erste einfache Demo:
Paket Demo; import com.jfinal.config.*; öffentliche Klasse Democonfig erweitert Jfinalconfig {public void configConstant (konstant me) {me.setDevMode (wahr);} public void configroute (Routes me) {me.add ("/hello", hellocontroller. configPlugin (plugins me) {} public void configInterceptor (interceptors me) {} public void confighhandler (Handler ME) {}}Konfigurieren Sie dann den Controller:
Paket Demo; import com.jfinal.core.controller; öffentliche Klasse Hellocontroller erweitert Controller {public void index () {RenderText ("Hallo Jfinal World.");}}Öffnen Sie dann den Browser und geben Sie sie direkt auf http: // localhost/hello ein. Sie werden sehen, dass die Seite Hallo Jfinal World ausgibt.
Hier ist das grundlegendste Beispiel für die Verwendung, hier ist mein Programm:
Paket Demo; import com.jfinal.config. com.jfinal.template.Engine; Import Controller.StudentController; Import Demo.model.classes; Demo.model.Student; Democonfig erweitert jfinalconfig {public static void Main (String [] args) {Jfinal.start ("Src/Main/Main/Main/Main/Main/Main/Main/Main/Main/Main", 80, 8), 5). } public void configConstant (konstants mich) {me.setDevMode (true); // Diese Methode wird verwendet, um den JFINAL -Konstantwert zu konfigurieren, z. B. die Konfiguration des Konstantenmodus -Konstants DevMode, der folgende Code konfiguriert JFINAL // Ausführen im Entwicklungsmodus: Im Entwicklungsmodus gibt JFINAL Berichte für jede Anforderung aus, z. } public void configroute (macht mich weiter) {me.add ("/", hellocontroller.class); me.add ("/test/mytest", hellocontroller.class, "test"); me.add ("/student", studentController.class); //me.add("/classeses ", classSController.class); } public void configEngine (Engine me) {} public void configPlugin (Plugins me) {// c3p0plugin cp = new c3p0plugin ("jdbc: mysql: // localhost/db_name", // "username", "password"); // me.add (cp); LoadPropertyFile ("a_little_config.txt"); Druidplugin dp = new druidplugin (getProperty ("jdbcurl"), getProperty ("Benutzer"), getProperty ("Passwort")); me.add (dp); ActivereCordPlugin ARP = New ActInerCordPlugin (DP); me.add (arp); ARP.Addmapping ("Student", "Studentid", Student.Class); ARP.AddMapping ("Klassen", "ClassSID", classes.class); // Diese Methode wird verwendet, um das Plugin von Jfinal zu konfigurieren. Der folgende Code konfiguriert das Druid Database Connection Pool Plug-In und ActivereCord // Datenbankzugriffs-Plug-In. Mit der folgenden Konfiguration ist es sehr bequem, die Datenbank in Ihrer Anwendung mit ActivereCord zu betreiben. } public void configInterceptor (interceptors me) {//me.add(new AuthIterceptor ()); // Diese Methode wird verwendet, um den globalen Interceptor von JFINAL zu konfigurieren. Der globale Interceptor wird alle Aktionsanfragen abfangen, sofern im Controller // @clear nicht im Controller gelöscht wird. Der folgende Code konfiguriert einen Interceptor namens Authinterceptor. } public void confighhandler (Handler ME) {}}Die einfache Beschreibung jeder Methode hier ist in den Kommentaren geschrieben.
Dann gibt es den Controller:
Obwohl der Dienst hier deklariert ist, wird er nicht verwendet. Es wird direkt in der Controller -Methode verwendet.
Paketcontroller; import Java.util.List; Import Java.util.Map; Import com.alibaba.fastjson.jsonObject; import com.jfinal.aop.bevor; Demo.Model.Student; Import Service.studentService; Public Class StudentController erweitert den Controller { /*** Es gibt viele Möglichkeiten, StudentID zu erhalten, was mit der Parametemethode des Front-End-Pass-Passes übereinstimmt. Controller bietet die Methoden der GetPara -Serie. Die offizielle API ist sehr detailliert. JFINAL verwendet originale SQL -Anweisungen, die einfach und bequem sind. SetAttr ("studentList", list); Geben Sie das Ergebnis in den Anforderungsbereich ein. JFINAL verfügt auch über eine Methode, um das Formular direkt an Objekte in Objekte GetModel (student.class) zu erhalten. Das heißt, wie Struts2 entspricht der Formname, was sehr bequem zu addieren ist, studentid student.set ("studentid", "mysequence.nextval"). Save (); JFINAL hat mehrere Möglichkeiten zur Rückkehr und kann auch JSON -Daten zurückgeben. Die Methode zur Render -Serie ist in der offiziellen API*/ static static static staticService Service = new studlingService () sehr detailliert. @Before (studentInterceptor.class) public void index () {list <Student> list = student.dao.find ("SELECT * From Student"); setAttr ("studentList", list); // Beachten Sie, dass der Code = Render ("/student/index.html"), wenn der folgende Pfad/den Root -Verzeichnis aussieht, dh der Code = Render ("/student/index.html"); render ("index.html"); } public void add () {render ("add.html"); } public void test () {list <student> list = student.dao.find ("aus dem Schüler auswählen"); setAttr ("studentList", list); setAttr ("student", list.get (0)); render ("test.jsp"); } public void getList () {list <Student> list = student.dao.find ("SELECT * From Student"); JsonObject jo = new JsonObject (); jo.put ("Code", 0); jo.put ("msg", true); jo.put ("count", list.size ()); jo.put ("Daten", Liste); Renderjson (Jo); } public void layui () {list <Student> list = student.dao.find ("SELECT * From Student"); setAttr ("studentList", list); render ("index3.html"); } public void delete () {// Erhalten Sie den Wert des Formulardomain -Namens studentid student.dao.deletebyId (getPara ("studentID"); ForwardAction ("/Student"); } public void delete1 () {// Erhalten Sie den ersten Wert in der URL -Anfrage student.dao.deletebyId (getParatoint ()); ForwardAction ("/Student"); } public void update () {student student = getModel (student.class); student.update (); ForwardAction ("/Student"); } public void get () {student student = student.dao.findbyid (getPara ("studentId")); SetAttr ("Student", Student); render ("index2.html"); } public void get1 () {student student = student.dao.findbyid (getParatoint ()); SetAttr ("Student", Student); render ("index2.html"); } @Before (studentValidator.class) public void Save () { /*** GetModel wird verwendet, um das vom Feld Seitendformular übergebene Modellobjekt zu empfangen. Der Formularfeldname heißt "modelName.attrname" http://www.jfinal.com. Der von GetModel verwendete Attrname muss genau mit dem Datentabellenfeldnamen übereinstimmen. Die GetBean -Methode unterstützt traditionelle Java -Bohnen, einschließlich Modellen, die JFNAL -Generator verwenden, um Getter- und Setter -Methoden zu generieren. Verwenden Sie beim Übergeben von Argumenten auf Seitenformulare den Attrname, der mit der Setter -Methode und nicht mit Datentabellenfeldnamen übereinstimmt. Der Unterschied zwischen GetModel und GetBean besteht darin, dass der erstere den Feldname der Zahlen Tabelle verwendet und letzteres den Attributnamen verwendet, der mit der Setter -Methode für die Dateninjektion übereinstimmt. Es wird empfohlen, zuerst die GetBean -Methode zu verwenden. */// getBean (student.class) .save (); getModel (student.class) .save (); Umleitung ("/Student"); } @Before (StudentValidator2.Class) public void SaveBean () {getBean (student.class) .save (); Umleitung ("/Student"); }}Die gleiche einfache Erklärung ist auch in den Kommentaren geschrieben.
Die Methoden sind hier im Grunde alles, hier sind einige andere Konfigurationen:
Dies ist die Entitätsklasse:
Paket Demo.Model; import com.jfinal.plugin.activeCord.model; Student der öffentlichen Klasse erweitert Modell <Student> {Public Static Final Student DAO = New Student (); /*** Activerecord ist eine der zentralsten Komponenten von JFinal. Durch den Betrieb der Datenbank über ActivereCord wird die Menge an Code erheblich reduziert und die Entwicklungseffizienz erheblich verbessert. Die Konfiguration befindet sich hinten. Ich benutze hier Modell. Das Modell ist eine der wichtigsten Komponenten in ActivereCord, die als Modellteil im MVC -Modus fungiert. Der Benutzer im obigen Code verfügt sofort über viele bequeme Methoden, um die Datenbank durch Erben des Modells zu betreiben. Das in Benutzer deklarierte DAO -statische DAO -Objekt ist für die Bequemlichkeit von Abfragebetragen definiert, und das Objekt ist nicht erforderlich. Modelle, die auf ActivereCord basieren, müssen keine Attribute, Getters und Setter -Methoden, XML -Konfiguration und Annotationskonfiguration definieren, wodurch die Codemenge stark reduziert wird. In der offiziellen API finden sich gemeinsame Modellmethoden. JFINAL verfügt außerdem über den ursprünglichen DB + -Ed -Rekordmodus, die DB -Klasse und die begleitende Datensatzklasse, die reichere Datenbankbetriebsfunktionen außerhalb der Modellklasse bereitstellen. Bei Verwendung der DB- und Datensatzklassen müssen Datenbanktabellen nicht abgebildet werden, und der Datensatz entspricht einem allgemeinen Modell. In der offiziellen API finden sich gemeinsame DB -Methoden. */}StudentValidator:
Paket studentValidator; import com.jfinal.core.controller; import com.jfinal.validate Controller.render ("/add.html"); } @Override Protected void Validate (Controller Controller) {// Überprüfen Sie den Feld des Formulars, geben Sie den Informationsschlüssel zurück, senden Sie den Informationswert Validierungsteuerung zurück ("student.studentName", "StudentNamemsg", "Bitte geben Sie den Schülernamen ein!"). }} Paket studentValidator; import com.jfinal.core.controller; import com.jfinal.validate Controller.render ("/add.html"); } @Override Protected void Validate (Controller Controller) {// Überprüfen Sie den Feld des Formulars, geben Sie den Informationsschlüssel zurück, geben Sie den Informationswert Validierungsteuerung zurück ("StudentName", "StudentNamemsg", "Bitte geben Sie den Schülernamen ein!"). }}Studentinterceptor:
Paket studentInterceptor; import com.jfinal.aop.Interceptor; import com.jfinal.aop.invocation; öffentliche Klasse studentInterceptor implementiert Interceptor {public void Intercept (Aufruf AI) {System.out.println ("Bevor Action Invoking"); ai.invoke (); System.out.println ("After Action aufrufen"); }}Dann die Seite an der Rezeption:
In Bezug auf die Seite an der Rezeption müssen Sie sich das sechste Kapitel des Dokuments, den Inhalt der Jfinal -Vorlage -Engine, ansehen und verstehen, wie JFINAL in der Rezeption angezeigt wird. Das ist sehr wichtig.
<! DocType html> <html> <kopf> <meta charset = "utf-8"> <title> Student Management </title> <script type = "text/javaScript" src = "/jquery-1.12.4.min href = "/student/layui"> testen layui </a> <a href = "/student/test"> bearbeiten index 0 </a> <br> <a href = "/student/add"> add </a> <br> <Form Action = "/Student/Get"> id: <input type = "text href="/student/delete">Delete</a> <form action="/student/delete"> id:<input type="text" name="studentid"> <input type="submit" value="delete"> </form> #for(x : [1..10]) #(x) #end <table id="listtable"> <tbody> <tr> <th>id</th> <th>Name</th> <Th> Geschlecht </th> <th> Alter </th> <Th> Adresse </th> <Th> E-Mail </th> <Th> Operation </th> </tr> #For (x: studentList) <tr> <td style = "text-align: links; style = "text-align: links;">#(x.sex) </td> <td style = "text-align: links;">#(x.age) </td> <td style = "text-align: links: links: links:">#(x.address) </td> <td style = "textalign: links; style="text-align:left;"> <a href="/student/delete?studentid=#(x.studentid)">Delete</a> <a href="/student/delete1/#(x.studentid)">Delete</a> <a href="/student/get?studentid=#(x.studentid)">Modify</a> <a href = "/student/get1/#(x.studentid)"> modify </a> <a href = "/student/get1/#(x.studentid)"> modify </a> </td> </tr> #end </tbody> </table> </body> </html> </tr> #end </tbody> </table> </body> </html>#
Dies ist der Seiteneffekt, da es keinen Stil gibt, es sieht rau aus. Anschließend besteht das Folgende aus der normalen Verwendung von Layui und der normalen gewohnheitsmäßigen Methode, um Daten zurückzugeben:
<! DocType html> <html> <kopf> <meta charset = "utf-8"> <title> Student Management Layui </title> <script type = "text/javascript" src = "/layui-v2.2.2.45/layui.js"> </script> <link rel = "stylesheet" href = "/layui-v2.2.45/layui/css/layui.css" Media = "All"> </head> <body> <div style = "margin: 0px; background-color: weiß; margin: 0 10px;" aria-hidden = "true"> </i> add </button> </a> <form style = "float: Right;" Onsubmit = "false return"> <div> Suche nach Benutzern: <Div> <input name = "name" id = "Demoreload" autoComplete = "off"> </div> <button style = "transform: translatey (-3px);"; Data-type = "reload"> suche </button> </div> </div> </form> </blockquote> </div> <table lay-data = "{url: '/student/getList', id: 'idTest', Höhe: 'full-60',}" Lay-filter = ". width:'20%',}">id</th> <th lay-data="{field:'studentname', width:'20%'}">Name</th> <th lay-data="{field:'sex', width:'20%'}">Gender</th> <th lay-data="{field:'age', width:'20%'}">Age</th> <th lay-data="{field:'address', width:'20%'}">Address</th> <th lay-data="{fixed: 'right', width:'17%', align:'center', toolbar: '#barDemo1'}"></th> </tr> </tr> </table><script type="text/html" id="barDemo1"><a id="edit" lay-event="edit">Modify</a><a lay-event="del">Delete</a></script></body><script>layui.use('table', function(){ var table = layui.table, form = layui.form;; //Select table.on('checkbox(demo)', function(obj){ console.log(obj) }); // Symbolleiste table.on ('Tool (Demo)', Funktion (obj) {var data = obj.data; if (obj.event ==== 'del') {layer.confirm ('re wirklich löschen den Benutzer', function (index) {$ .ajax ({type: "post", url: "/student/delete? DataType: "Text", // Rückgabeerfolg: Funktion (returnData) {table.reload ("idTest"); ['380px', '80%'], Inhalt: "/student/get?studentid="+Data.Studentid, Funktion (Index, Layero) {Layer.CLOSE (INDEX); $ (Fenster) .Resize (function () {layui.layer.full (index);}) layui.layer.full (Index); URL: "<%= Basepath%>/sys/user/passuser", data: {id: data.id}, // dataType: "text", // return Erfolg: function (returnData) {layui.use ('layer', function () {layer.msg (returnData.msg);}); Seite 1},}); Layer.Alert (JSON.Stringify (Daten)); Tabelle.Checkstatus ('idTest'); });}); </script> </html>Das fühlt sich ein bisschen besser an, weil es nur das erste Mal ist, dass ich es benutze und einen Test mache, so dass es immer noch relativ rau ist.
Anschließend ist es wichtig, das Problem der Daten zurückzusetzen, die auf diese Weise zurückkehren:
public void getList () {list <student> list = student.dao.find ("aus dem Schüler auswählen"); JsonObject jo = new JsonObject (); jo.put ("Code", 0); jo.put ("msg", true); jo.put ("count", list.size ()); jo.put ("Daten", Liste); Renderjson (Jo); }Dies ist die Methode, auf die die Layui -Tabellen -URL angezeigt wird. Hier müssen Sie die JSON -Daten auf Renderjson -Weise zurückgeben.
Dann sollte beachtet werden, dass ich versucht habe, die Listensammlung direkt zurückzugeben. Es scheint, dass die Methode machbar ist, aber da die Layui -Tabelle im obigen Format sein muss, um Daten zu empfangen, wird sie nicht auf der Seite angezeigt. Wenn ich jedoch JO direkt zurückgibt, berichtete der Hintergrundfehler, und dieses Problem kann nur morgen gelernt und gelöst werden.
Im Folgenden finden Sie verschiedene Möglichkeiten, die zurückgegebene Render -Methode zu verwenden:
Dann müssen Sie auf den Methodenaufruf und die Parameterübertragung achten:
Es gibt zwei Methoden und Parameterübertragungsmethoden wie folgt:
<a href = "/student/delete? studentId =#(x.studentid)"> delete </a> <a href = "/student/delete1/#(x.studentid)"> löschen </a> <a href = "/student/get? href = "/student/get1/#(x.studentid)"> modify </a> <a href = "/student/get1/#(x.studentid)"> ändern 1 </a>
Hier ist die Controller -Methode:
public void delete () {// Erhalten Sie den Wert des Formulars Domain Name studentid student.dao.deletebyId (getPara ("studentid")); ForwardAction ("/Student"); } public void delete1 () {// Erhalten Sie den ersten Wert in der URL -Anfrage student.dao.deletebyId (getParatoint ()); ForwardAction ("/Student"); } public void update () {student student = getModel (student.class); student.update (); ForwardAction ("/Student"); } public void get () {student student = student.dao.findbyid (getPara ("studentId")); SetAttr ("Student", Student); render ("index2.html"); } public void get1 () {student student = student.dao.findbyid (getParatoint ()); SetAttr ("Student", Student); render ("index2.html"); }Schließlich gibt es zwei Möglichkeiten, um Entitätsklassen zu akzeptieren:
@Before (studentValidator.class) public void Save () { /*** getModel wird verwendet, um das vom Feld Seitendand übergebene Modellobjekt zu empfangen. Der Formularfeldname heißt "modelName.attrname" http://www.jfinal.com. Der von GetModel verwendete Attrname muss genau mit dem Datentabellenfeldnamen übereinstimmen. Die GetBean -Methode unterstützt traditionelle Java -Bohnen, einschließlich Modellen, die JFNAL -Generator verwenden, um Getter- und Setter -Methoden zu generieren. Verwenden Sie beim Übergeben von Argumenten auf Seitenformulare den Attrname, der mit der Setter -Methode und nicht mit Datentabellenfeldnamen übereinstimmt. Der Unterschied zwischen GetModel und GetBean besteht darin, dass der erstere den Feldname der Zahlen Tabelle verwendet und letzteres den Attributnamen verwendet, der mit der Setter -Methode für die Dateninjektion übereinstimmt. Es wird empfohlen, zuerst die GetBean -Methode zu verwenden. */// getBean (student.class) .save (); getModel (student.class) .save (); Umleitung ("/Student"); } @Before (StudentValidator2.Class) public void SaveBean () {getBean (student.class) .save (); Umleitung ("/Student"); }Die zweite GetBean -Methode in meiner Demo wird möglicherweise nicht festgelegt, und nur die ID wird generiert und keine anderen Daten werden hinzugefügt.
Bei Bedarf. Hier ist die offizielle Demo:
Paket com.demo.common.model; import com.demo.common.model.base.basblog;/** * Diese Demo drückt nur die oberflächlichste JFINAL-Verwendung aus und ist wertvoller und praktischer Enterprise-Level-Nutzung * für Details, siehe JFILE-Club: Http://jfinal.com/club * BLANK-Modell, siehe JFILE-Club: Http://jfinal.com/club * BLOGE-Modell, siehe JFinal Club: Http://jfinal.com/club * BLOGE-Modell. * Es wird empfohlen, Camel -Benennungsregeln für Datenbankfeldnamen zu verwenden, um die Konsistenz mit Java -Code zu erleichtern, z. B. Feldnamen: userID */@unterdrückungswarnings ("Seriell") Public Class Blog erweitert BasisBlog <blog> {} Paket com.demo.common.model.base; import com.jfinal.plugin.activeCord.model; importieren com.jfinal.plugin.activeCord.ibean;/***, das von Jfinal generiert, diese Datei nicht ändern. */@SuppressWarnings ({"Serial", "Unbekämpft"}) public abstract Class BaseBlog <M erweitert BasisBlog <m >> erweitert Modell <M> implementiert ibean {public m setID (java.lang.Integer id) {set ("id", id); zurück (m) dies; } public java.lang.Ineger getId () {return getInt ("id"); } public m settitle (java.lang.string title) {set ("title", title); zurück (m) dies; } public java.lang.String gettitle () {return getSstr ("title"); } public m setContent (java.lang.string content) {set ("content", content); zurück (m) dies; } public Java.lang.String getContent () {return getSstr ("Inhalt"); }}Die oben genannte Nutzung der Nutzungsnoten der JFILINAL Fast Development Framework ist der gesamte Inhalt, den ich mit Ihnen teile. Ich hoffe, Sie können Ihnen eine Referenz geben und ich hoffe, Sie können wulin.com mehr unterstützen.