Apache Wicket erreicht die Version 6
http://wicket.apache.org/. Änderungen siehe hier: https://wicket.apache.org/2012/09/05/wicket-6.0.0-released.html.
http://wicket.apache.org/. Änderungen siehe hier: https://wicket.apache.org/2012/09/05/wicket-6.0.0-released.html.
Anfang 2009 schrieb ich im Blog:
Darauf hat die Welt gewartet: Wieder ein neues/altes Web-Framework
Apache Click http://incubator.apache.org/click/ heißt es und läuft ab Java 1.4. Super. Kommt damit 5 Jahre zu spät. Also nix mit Annotationen. Schön XML und so. (Click 0.3 gab es auch schon im März 2005, also ist das Projekt nicht wirklich jung.) Das Wort Ajax taucht auf den ganzen Webseiten nicht auf. Immerhin gibt es eine http://incubator.apache.org/click/docs/click-ide.html auf Eclipse 3.4 Basis. Toll die Antwort auf die Frage "Why develop a new Web Application Framework?" Antwort: "Because the existing frameworks did not meet my needs. Struts doesn’t really do much, while Tapestry is too complicated. For a more comprehensive answer please see Why Click." Klar, als ob es nur Struts und Tapestry gibt. Vor 10 Jahren vielleicht. Bei Struts 1.x ist die Zeit schon lange abgelaufen und bei Tapestry 5 hält man sich noch ein wenig mit DI/IoC über Wasser.
Heute, im Jahr 2012, hat es Click zu einem vollständigen Web-Framework geschafft, die Demos (http://click.avoka.com/click-examples/home.htm) sehen von der Funktionalität OK aus, nur etwas altbacken, etwa so wie Windows 3.1 im Vergleich zu Windows 7.
Das letzte Update von Click ist von März 2011, also 1 1/2 Jahr alt. Das war’s dann wohl.
So, da haben wir mal wieder in Update von GWT: http://code.google.com/webtoolkit/release-notes.html#Release_Notes_Current. Als ich den Milestone vor ein paar Wochen getestet habe, gab es noch einige Warnungen auf der Kommandozeile. Weiteres: http://code.google.com/webtoolkit/doc/latest/ReleaseNotes.html. So spektakulär ist das nicht in meinen Augen, hätte uach GWT 2.3.x heißen können.
Siehe http://wicket.apache.org/2011/09/07/wicket-1.5-released.html.
Most notable changes
With this release the Wicket team has revised many of its internals. A short list:
- HTML5 components added:
EmailTextField,NumberTextField,UrlTextFieldandRangeTextField- New inter-component events (explained below)
- Minimum required servlet API is servlet-api 2.5
- All standard validators now extend
Behaviorto allow for client side validationsIBehaviorhas been removed andAbstractBehaviorhas been deprecated, you should now extendBehaviorinstead- Simplified the request cycle processing and made it more extensible
- URL handling is now in one place
- Wicket’s rendering code has been greatly simplified
- Improved browser caching support
- ClientSideImageMap replaces old ImageMap
- Better support for running behind proxies with
x-forwarded-forheader- Request cycle listeners make it easier to integrate frameworks in your Wicket application
- Consistent naming: methods with
Javascriptin the name have been renamed to use proper capitalization:JavaScript- Switching to HTTPS is as simple as configuring a new root mapper to make Wicket HTTPS aware and annotating a page with @RequireHttps
A longer list of changes and improvements can be found in our migration guide.
Weitere Infos im Entwickler-Blog http://www.jroller.com/sjivan/entry/smart_gwt_2_4_released.
http://googlewebtoolkit.blogspot.com/2010/12/gwt-211-is-now-available.html listet auf:
GWT SDK
GWT’s RequestFactory component, introduced in GWT 2.1, received a lot of attention, both from the GWT team at Google and from the GWT open source community at large. Based on this feedback, we’ve added the following:
- A service layer, which includes support for non-static service objects
- Value object support
- Multiple methods calls on a single request
Google Plugin for Eclipse
- Improved UiBinder error reporting within SpringSource Tool Suite (STS)
- Optimized the IDE experience by removing unused Java builders and leveraging the AspectJ fixes in the latest STS release
- Updated Speed Tracer to perform a full J2EE publish before launching
GWT Designer
- Added support for: CellList, CellTable, CellTree, CellBrowser & SimplePager
- Improved support for GWT UiBinder, including the following annotations:
- WebKit rendering for 32-bit Windows (used to use IE)
Was ist an folgendem Text falsch?
Don’t do it!
Nichts, oder? Doch! Denn gibt man den Text in ein Formularfeld bei Europcar ein, bekommt man die Meldung:
forbidden character was entered (< > “ & | ; $ % ‘ + \) please amend.
Das ist echt schwach, denn natürlich möchte man das statt dont richtig don’t schreiben… Moderne Web-Frameworks maskieren Sonderzeichen automatisch aus. Die Europcar-Seiten enden auf .do — das riecht nach Struts und stinkt nach schlechten Entwicklern.
Wer’s selbst ausprobieren will: http://www.europcar.com/EBE/module/footer/ContactUs.do
Der GWT-Blog http://googlewebtoolkit.blogspot.com/2010/06/gwt-204-is-now-available.html kündigt ein kleines Update an, was unter anderem Probleme bei der Umsetzung des Shift-Operators behebt (Fehler in der JS-Engine von Safari):
Noch zwei weitere Kleinigkeiten wurden angegangen:
Der Showcase zeigts: http://www.smartclient.com/smartgwt/showcase/. 270 Beispiele sind schon eine stolze Zahl.
Servlets zu schreiben gehört nun nicht gerade zu meinem Alltagsaufgaben, aber für ein JSON-Endpoint muss ein Servlet nun doch mit ins Boot. (REST-API geht leider nicht.) Einen Test dafür zu schreiben finde ich selbstverständlich, da ich geil auf grüne Balken bin (nein, nicht die Download-Balken). Es kommen für Servlet-Tests unterschiedliche Ansätze in Betracht, die sich grundsätzlich in 2 Gruppen einteilen lassen:
Dass ich ein Jetty-Fan bin ist vielleicht schon in früheren Posts rübergekommen, aber hier lasse ich meinen Lieblingsserver links liegen und gehe auf die Mock-Tests. Gut funktioniert für mich spring-test. Ein Beispiel.
Das Servlet:
package com.tutego.traida.server.service.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Raplet extends HttpServlet
{
private static final long serialVersionUID = 6942655630840028053L;
@Override
protected void doGet( HttpServletRequest req, HttpServletResponse resp ) throws ServletException,
IOException
{
resp.getWriter().print( "hello " + req.getParameter( "name" ) );
}
}
Der Test:
package com.tutego.traida.server.service.servlet;
import javax.servlet.ServletException;
import org.junit.*;
import static org.junit.Assert.*;
import org.springframework.mock.web.*;
public class RapletTest
{
private Raplet servlet = new Raplet();
private MockHttpServletRequest request;
private MockHttpServletResponse response;
@Before
public void before() throws ServletException
{
servlet.init( new MockServletConfig() );
this.servlet = new Raplet();
this.request = new MockHttpServletRequest();
this.response = new MockHttpServletResponse();
}
@Test
public void doGetTest() throws Exception
{
request.setParameter( "name", "tutego" );
servlet.doGet( request, response );
assertEquals( "hello tutego", response.getContentAsString() );
}
}
Einfacher geht’s nun wirklich nicht mehr.
Zum Ablaufen des Tests packe in den Klassenpfad:
Zwar bin ich kein Spring Fan Boy, aber mit 2 Archivdateien brennt die Jar-Hölle nicht so heiß (die Abhängigkeiten sind übertrieben).