Heiner KückerJSP Spreadsheet |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Home Java-Seite Bit Packed Array ASM Improved heterogene Map, HMap Constraint Code Generator JSP WorkFlow PageFlow FlowControl Page Flow Engine Web Flow Engine Control_and_Command JSP_Spreadsheet Code-Generator für Option-Either-Stil in Java verbesserter Comparator Fluent-Interface Code-Generator auf Basis einer Grammatik Visitor mit Multidispatch for-Schleife mit yield-return Kognitions-Maschine semantisches Netz Domain Parser Codegenerator_für hierarchische Datenstrukturen Expression_Engine Formula_Parser Thread Preprocessor State Transition Engine AspectJ Java_Explorer DBF_Library Kalender_Applet SetGetGen BeanSetGet CheckPackage LineNumbers GradDms Excel-Export StringTokenizer JspDoc JspCheck JSP-Schulung Java Server Pages Struts Ascii-Tabellen- Layouter Ascii-Baum- Layouter Ascii-Art-Fluss- Diagramm- Parser AsciiArt AssignmentMatrix Layouter StringSerial Silbentrennung JDBC_Schlüssel- Generierung bidirektional/ unidirektional gelinkte Liste Java_Sitemap Generator XmlBuilder RangeMap StringFormatter VersionSafe XCopy JTextField CommandLine- ParamReader Bitmap-Grafik MultiMarkable- Buffered- InputStream JavaCache JdomUtil CollectionUtil XML Really Pull Parser Log-Filter Remote-Protokoll Sudoku-Generator Delegation statt Mehrfachvererbung Disjunct Interval Set WebCam_Demo Weiterentwicklung_Java Alaska-XBase++-Seite Projekte Philosophien Techniken Konzepte Sudoku Kontakt / Impressum Links SiteMap Letzte Aktualisierung: 02.12.2004 |
JSP Spreadsheet
Im Javamagazin 12.2004, Seite 83 ist ein Artikel über Tabellen in Struts. Als Beispiel dient eine Tabelle mit Aktien, ein Depot. Natürlich ist dies kein Spreadsheet im eigentlichen Sinne, den die Anzahl Spalten ist nicht variabel, aber der Autor hat es nun mal so genannt.
Dieses zugegebenermassen simple Beispiel will ich nun mit meinem CnC-Framework nachvollziehen. Der Link zum Download der Sourcen und des ausführbaren WAR-Files befindet sich am unteren Ende dieser Seite. 1. Schritt: web.xml Eintragen des zentralen Servlets der Applikation, JspSpreadsheetServlet, sonst alles von CncDemo übernommen. <servlet> <servlet-name>cncaction</servlet-name> <servlet-class>de.jspspread.servlet.JspSpreadsheetServlet</servlet-class> 2. Schritt: JspSpreadsheetServlet.java Festlegung Action-Package (für die Action-Methoden) public String getActionPackage() { return "de.jspspread.actions."; } // end method getActionPackagePrefix Festlegung Default-Action-Methoden-Klasse public String getDefaultActionClassName() { return "JspSpreadsheetDefaultActions"; } // end method getDefaultActionClassName Festlegung Name der Applikation. public String getApplicationName() { return "JspSpreadsheet"; } Alle weiteren Optionen sind hier nicht von Bedeutung. 3. Schritt: AktieFormBean.java Anlegen der FormBean. Die set- und get-Methoden erzeugt die IDE. public final class AktieFormBean { private String name; private int anzahl; private double preis;Dazu eine Methode für Wert je Position. /** * Für Ausgabe Gesamtpreis in der Liste . * * @return */ public double getGesamt() { return anzahl * preis; } 4. Schritt: JspSpreadsheetDefaultActions.java Kopieren der Klasse CncDemoDefaultActions auf JspSpreadsheetDefaultActions. Umbenennen der alten FormBean in AktieFormBean durch Suchen + Ersetzen. Vorbelegen der Werte als Demo für das Lesen von der Datenbank. public static String load( final int iPaIndex, final HttpServletRequest request, final HttpServletResponse response, final CncContext cncContext) { ArrayList arrList = new ArrayList(); for (int i = 0; i < 4; i++) { AktieFormBean aktie = new AktieFormBean(); aktie.setName("Aktie " + (i + 1)); aktie.setPreis(i + 1); aktie.setAnzahl(i + 1); arrList.add(aktie); }// end for HttpSession session = request.getSession(true); session.setAttribute(SessionKeys.CNC_LIST_KEY, arrList); return null; }// end method load Speichern nur als Demo. public static String save( final int iPaIndex, final HttpServletRequest request, final HttpServletResponse response, // -- final CncContext cncContext) { CncUtil.setMessage(request, "Speichern in dieser Demoversion nicht möglich"); return null; }// end method save 5. Schritt: jsp_spreadsheet.jsp <cnc:form/> <cnc:iterate> <tr> <td align="left"> <cnc:listwrite property="name"/> </td> <td align="left"> <cnc:input type="text" indexed="true" property="anzahl"/> </td> <td align="right"> <cnc:input type="text" indexed="true" property="preis"/> </td> <td align="right"> <cnc:listwrite property="gesamt"/> </td> </tr> </cnc:iterate> <tr> <td colspan="3"> <cnc:button name="save" value="Speichern"/> </td> </tr> </form> 6. Schritt: welcome.jsp Wird ohne wesentliche Änderungen übernommen. 7. Schritt: Fluss-Steuerdatei flow.cnc procedure main() { logon { // im Body der logon-Deklaration ist die User-Validierung ausgeschalten while ( true ) { if ( session.CNC_LIST_KEY == null ) { //Daten von Datenbank holen action( 'load' ); } jsp( "/jsp_spreadsheet.jsp" ); if ( cnc_button == 'save' ) { action ( 'save' ); } } // end while } // end logon } // end procedure main 8. Schritt: Erweiterungen Einbau der Features Datensatz Löschen, Einfügen und Hinzufügen sowie Blättern.
procedure main() { logon { // im Body der logon-Deklaration ist die User-Validierung ausgeschalten while ( true ) { if ( session.CNC_LIST_KEY == null ) { //Daten von Datenbank holen action( 'load' ); } jsp( "/jsp_spreadsheet.jsp" ); if ( cnc_button == 'save' ) { action ( 'save' ); } else if ( cnc_button == 'add' ) { add( session.CNC_LIST_KEY , newObject( 'de.jspspread.formbeans.AktieFormBean' ) ); // zum Ende der Liste blättern invokeMethod( session.CNC_BROWSE_CTRL_KEY , "goLast" ); } else if ( cnc_button == 'ins' ) { add( session.CNC_LIST_KEY , newObject( 'de.jspspread.formbeans.AktieFormBean' ) , cnc_button_index ); } else if ( cnc_button == 'del' ) { // Zwischenspeichern Button-Index, weil der Button-Index nach dem Anzeigen der nächsten JSP nicht mehr im Request ist session.listIndex := cnc_button_index; //Löschfrage session.CNC_MESSAGE_KEY := "Aktie " + session.CNC_LIST_KEY[ cnc_button_index ] + " wirklich löschen?"; jsp( 'del_ask.jsp' ); if ( cnc_button == 'del' ) { remove( session.CNC_LIST_KEY , session.listIndex ); } session.listIndex := null ; } } // end while } // end logon } // end procedure main WAR-File für Tomcat5 unter JDK 1.4 Download jsp_spreadsheet.war Das war-File können Sie in das Verzeichnis TOMCAT_HOME/webapps kopieren. Tomcat (re)starten. Ansehen mit http://localhost:8080/jsp_spreadsheet . Source-Code Download der Quelldateien jsp_spreadsheet.zip Installation: Entpacken in Verzeichnis Ihrer Wahl (z.B. G:\CnC) Kompilieren mit ANT (build.bat oder build.xml) Start im Tomcat 5 mit http://localhost:8080/jsp_spreadsheet
Achtung: Erweiterungen und Fixes stelle ich ohne Historie
und ohne Ankündigung hier bereit. Lizenzbedingungen:
Die Programme, Quelltexte und Dokumentationen können ohne
irgendwelche Bedingungen kostenlos verwendet werden. |