/**
* Called when a null model is about to be retrieved in order to allow a subclass to provide an
* initial model.
* <p>
* By default this implementation looks components in the parent chain owning a
* {@link IComponentInheritedModel} to provide a model for this component via
* {@link IComponentInheritedModel#wrapOnInheritance(Component)}.
* <p>
* For example a {@link FormComponent} has the opportunity to instantiate a model on the fly
* using its {@code id} and the containing {@link Form}'s model, if the form holds a
* {@link CompoundPropertyModel}.
*
* @return The model
*/
protected IModel<?> initModel()
{
IModel<?> foundModel = null;
// Search parents for IComponentInheritedModel (i.e. CompoundPropertyModel)
for (Component current = getParent(); current != null; current = current.getParent())
{
// Get model
// Don't call the getModel() that could initialize many in between
// completely useless models.
// IModel model = current.getDefaultModel();
IModel<?> model = current.getModelImpl();
if (model instanceof IWrapModel && !(model instanceof IComponentInheritedModel))
{
model = ((IWrapModel<?>)model).getWrappedModel();
}
if (model instanceof IComponentInheritedModel)
{
// return the shared inherited
foundModel = ((IComponentInheritedModel<?>)model).wrapOnInheritance(this);
setFlag(FLAG_INHERITABLE_MODEL, true);
break;
}
}
// No model for this component!
return foundModel;
}
public class LazyLoad extends WebPage {
public LazyLoad() {
IColumn[] columns = new IColumn[] {
new PropertyColumn(new Model("col1"), "intValue"),
new PropertyColumn(new Model("col2"), "class") };
ISortableDataProvider dataProvider = new SortableDataProvider() {
public int size() {
return 300000;
}
public IModel model(Object object) {
return new Model((Integer) object);
}
public Iterator iterator(int first, int count) {
return loadEntriesFromDatabase(first, count).iterator();
}
private List<Integer> loadEntriesFromDatabase(int first, int count) {
List<Integer> items = new ArrayList<Integer>();
for (int i = 0; i < count; i++) {
items.add(new Integer(first + i));
}
return items;
}
};
DefaultDataTable t = new DefaultDataTable("t", columns, dataProvider, 3);
add(t);
}
}
(WWB) is a Wicket component toolkit for displaying and editing JavaBeans. Web pages are automatically generated based on bean properties and conventions. If necessary, the layout, editability, and actions of these pages can be customized. At the highest-level, WWB's BeanForm component provides rich AJAX form functionality. The form is embedded in a Page designed by you. This allows you to create customized page designs and multiple BeanForms to be incorporated on a single page.Other lower-level components may be used independently of BeanForm (e.g., BeanGridPanel). BeanForm makes it very convenient to implement a bean-based form if you don't want to go to a lot of extra work. You focus on the model (beans), Fields within a form are dynamically sent back to the server-side bean as they are changed, which eliminates the typical form submit cycle. This makes WWB act more like a rich client application and less like a standard forms-based application.
I have been using Wicket for a while now and I’ve occasionally wondered if GWT provides any kind of advantage over Wicket. Here is a comparison and instead of coding a simple “Hello World” kind of example, here is something a little more complex. Functionality The target functionality is a one-page application that shows data in a single table. Item counts are displayed categorized under multiple “spaces” (workspaces). There is a summary row. The user can click on a space to expand the count of items grouped by status. Some of the tricky parts are: * The number and names of the possible status types can be different for different spaces. * Some of the table cells have to be merged to represent the grouping by space and then by status. * the style / color of the different cells has to be controlled to differentiate the total count from that grouped by status. Let's look at the Java code common to the GWT and Wicket implementations.
I want to start using JPA with Wicket, and the quickest way was to start with Qwicket, a project that already has done the heavy lifting. I wanted to be able to build and run my maven-managed application from eclipse. And lastly, I wanted to use MySQL. Qwicket does come with maven support, but it's managed from an ant script. I wanted native maven support. Here's what I did to change qwicket so it fits my requirements:
Wicket is a lightweight, component-oriented framework that does much to bring the easy, intuitive interfaces found in desktop applications to Java Web development. In this series Nathan Hamblen (of databinder and coderspiel blog ) introduces key aspects of Wicket that differentiate it from other Web application frameworks This first ( of 3 ) article investigates Wicket's virtual state, demonstrating the many ways Wicket accommodates both stateless and stateful Web application development.
Apache Wicket uses so called model objects to bind data objects to Wicket components. The framework provides a number of model implementations to access data
Wicket Web Beans is an Apache Wicket (http://wicket.apache.org) toolkit for JavaBeans. AJAX Web forms are automatically generated from bean properties. The toolkit normally does what you'd expect, but when it doesn't, you can override its behavior.
Java PureFaces is a layer on top of JSF that simplifies implementation. The article here is the aggregate of the blog posts that I have written on our blog. The framework is not yet made public, and we are looking to see if there is interest in us releasing it as an open-source project. We are not a JSF framework company; we develop web applications. This framework is a result of our experience with the tools with which we were already working.
Maven Archetypes for Web Applications
This page contains maven archetypes to help you quickly and easily get started on a web project that uses the jetty plugin. Each archetype allows you to generate a template for your project based on the included sample web application. (This supposes that maven 2.x is already installed in your system)
Qwicket is a quickstart application for the wicket framework. Its intent is to provide a rapid method for creating a new wicket project with the basic infrastructure in place so that you can quickly get to the meat of your application rather than mucking with the plumbing of a wicket application. Currently, the system only supports spring and hibernate built with ant. Future plans include support for maven 2 and other persistence layers such as ibatis.
In this article, after a quick introduction to Wicket, you will learn to obtain and set up the requisite software for Wicket-based web development. Then you will learn to develop interactive web pages using Wicket. Along the way, you will be introduced to some key Wicket concepts.