jQuery 1.3.x ist wesentlich schneller als 1.2.x

Die 1.3er Version von jQuery ist, zumindest unter OS-X mit Firefox, wesentlich schneller als die Vorgänger-Version 1.2. Kurz nach dem Laden einer HTML-Seite entsteht nun nicht mehr diese ärgerliche Rechenpause bei der der Browser kurz hing. Ein Upgrade lohnt sich.

Doppeltes Formular-Absenden in Spring-MVC verhindern

Jeder, der Web-Anwendungen erstellt oder betreibt, kennt es. Wenn ein Web-Formular nach 2 Sekunden noch nicht verarbeitet ist, klickt der Benutzer gerne ein weiteres mal auf den „Senden“-Button und erzeugt so einen weiteren Request. Da HTTP asynchron und verbindungslos ist, ist es gar nicht so einfach eine solche doppelte Formularversendung zu erkennen.

Session synchronisieren und Session-Form aktivieren

Im Spring-MVC lassen sich Formular-Requests bezüglich der Session synchronisieren. Dazu setzen wir das Controller-Attribut „synchronizeOnSession“ auf true. Es wird so verhindert, dass ein Formular nebenläufig verarbeitet wird.

setSynchronizeOnSession(true);

Ausserdem wird ein weiteres Controller-Attribut, und zwar „sessionForm“ auf true gesetzt, was Spring MVC dazu veranlasst, die Formulardaten in der Session zu speichern und, falls ein Formular doppelt abgesendet wurde, die Methode „handleInvalidSubmit(HttpServletRequest request, HttpServletResponse response)“ aufzurufen.

setSessionForm(true);

Falls jetzt ein Formular doppelt versendet wird, oder falls ein Benutzer ein Formular mit dem „zurück“-Button erneut anzeigen und absenden möchte, wird also nun „handleInvalidSubmit“ aufgerufen. Diese Methode lässt sich in unserem Controller überschreiben, um so zu bestimmen, wie sich der Controller im Falle einer doppelten Datensendung verhalten soll.

@Override
protected ModelAndView handleInvalidSubmit(HttpServletRequest request, HttpServletResponse response) throws Exception
{
    return new ModelAndView(getSuccessView()); // einfach weiter, da das Formular ja schon abgeschickt wurde
} 

Es muss übrigens nicht immer richtig sein, doppelte Formularversendungen zu verbieten. Wenn wir beispielsweise ein Suchformular erstellen, kann es sinnvoll sein, dem Nutzer zu erlauben, mit der Browser-Navigation zurück zum Formular zu gehen und eine Suche erneut abzuschicken.

Siehe hierzu auch: Doppeltes Formular-Absenden mit jQuery verhindern

Doppeltes Formular-Absenden mit jQuery verhindern

Mit Javascript kann man verhindern, dass der „Senden“ Button in Web-Formularen doppelt geklickt wird. Wir setzen ihn dazu automatisch auf „disabled“, wenn das Formular gesendet wurde. In jQuery sieht das etwas so aus:

$("#myForm").submit( function(){ $("#submitButton").attr("disabled", "true"); } );

Zur jQuery-Dokumentation von Events/submit

MAMP oder XAMPP zur PHP-Entwicklung unter OS-X

mamp-gui
MAMP Gui

Als ich begann MAMP zu benutzen, vor ein paar Jahren, war es noch die einzige Möglichkeit unproblematisch einen Apache mit PHP und MySQL auf dem Mac zum Laufen zu bekommen. Inzwischen ist etwas Zeit vergangen und es gibt den aus der Windows- und Linux-Welt bekannten XAMPP als Alternative zu MAMP.

Zur Installation wird XAMPP, genauso wie MAMP einfach in den Programme-Ordner kopiert und ist dann auch sofort lauffähig. Die Komponenten von XAMPP lassen sich über das Terminal oder mit einer GUI Anwendung namens „XAMPP Controls“ starten und stoppen. Die Standardinstallation benutzt die allseits bekannten Ports 80 und 3306 für apache und MySQL, weshalb man zum Starten das Administrator-Passwort eingeben muss. MAMP hingegen lässt sich nur über die MAMP-GUI starten und stoppen, nicht über das Terminal. Die MAMP-GUI bietet verschiedene Einstellungen, wie z.B. die Ports unter denen Apache und MySQL laufen. Eine solche GUI-Konfiguration ist in den XAMPP Controls nicht enthalten, hier muss man sich mit der Konfiguration von PHP, MySQL und Apache auskennen.

XAMPP Controls
XAMPP Controls

Die Verzeichnisstruktur von XAMPP ist für jemanden, der schon mal ein bisschen auf einem Linux-Server rumgemacht hat, leicht verständlich. Alle Konfigurations-Dateien, wie my.cnf, httpd.conf und php.ini befinden sich im Ordner „etc“. Des weiteren finden wir einen „logs“-Ordner in dem die Logfiles landen und einen „htdocs“-Ordner, der als Wurzelverzeichnis für die Webserver-Dokumente dient. Bei MAMP ist die Ordner-Struktur ähnlich, sieht aber irgendwie etwas unaufgeräumter aus. In XAMPP kann man die verschiedenen Server, wie Apache, MySQL und ProFTP separat starten und beenden. In MAMP lassen sich Apache und MySQL nur gemeinsam steuern. Ein großes Manko von MAMP ist, dass man die my.cnf zur Konfiguration von MySQL vergeblich sucht.

Kann man nun eher MAMP oder XAMPP empfehlen? Ich persönlich bin von MAMP auf XAMPP umgestiegen, da es wesentlich mehr einer richtigen Server-Umgebung entspricht, umfangreichere Möglichkeiten der Konfiguration bietet und Distributionen für Linux, Windows und OS-X existieren. MAMP hingegen, das es nur für OS-X gibt, ist immer noch die bessere Wahl für Webdesigner oder Nebenbei-PHP-Programmierer die mal eben ein WordPress oder Joomla lauffähig haben wollen und Einstellungen am liebsten mit einem grafischen Benutzer-Interface machen.

Fazit: MAMP ist mehr Mac-mäßig und XAMPP besser für Profis Technikversierte wie Software-Entwickler.

Zum Ausprobieren:

Zur Webseite von MAMP

Zur Webseite von XAMPP

Firefox ohne Alles zum Anzeigen von Web-Anwendungen

prism-startingUnter dem Namen „Prism“ gib es von dem Mozilla-Labs einen auf der Gecko-Engine basierten Browser, dessen Aufgabe es ist, als Rahmen für Web-Anwendungen zu dienen.

Beim Start vom Prism wird man zunächst nach der URL der Web-Anwendung gefragt, die man gerne nutzen möchte und Prism legt daraufhin Shortcuts im Dock, Programme-Ordner oder auf dem Schreibtisch an, mit der sich die Web-Anwendung dann direkt starten lässt.

Adressbar und Navigation lassen sich deaktivieren, da sie in dem meisten Web-Anwendungen ja eh nicht gebraucht werden.

Zur Webseite von Prism

„RewriteEngine not allowed here“ Fehlermeldung in apache2 (XAMPP)

Wenn vom apache-Webserver der Fehler „RewriteEngine not allowed here“ kommt, kann das daran liegen, dass, wie in meiner aktuellen XAMPP-Installation unter OS-X, „AllowOverride“ in der httpd.conf  auf „AuthConfig“ oder „None“ gesetzt wurde.

„AllowOverride“ definiert, welche Einstellungen der httpd.conf in einer .htaccess überschrieben oder geändert werden dürfen. Wenn man „AllowOverride“ auf „All“ setzt, lassen sich alle gewünschten Einstellungen in der .htaccess tätigen.

Hier der Ausschnitt aus meiner httpd.conf, der das Problem behoben hat:

    #
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   Options FileInfo AuthConfig Limit
    #
    AllowOverride All

Siehe hierzu auch: Konfigurationsdirektive: AllowOverride

Runde Ecken mit css

Auch mit reinem css ist es möglich, runde Ecken zu stylen. Leider muss es für verschiedene Browser noch verschiedenartig definiert werden.

Der Firefox braucht es als „-moz-border-radius“ und der Safari als „-webkit-border-radius“. Unter IE funktioniert das Ganze noch überhaupt nicht, aber das ist eigentlich auch egal.

Damit es in den meisten Browser (ausser Internet Explorer) funktioniert, definiert man runde Ecken in css so:

.boxMitRundenEcken {
    border: 1px solid black;
    border-radius: 5px; -moz-border-radius: 5px; -webkit-border-radius: 5px;
}
So sieht das dann aus