Hi guys, I had an idea last night and decided to implement it.
On my wicket app I have a lot of labels that is used just to display the model values to the user. So my code was some thing like this: WebMarkupContainer container = new WebMarkupContainer("container", new CompoundPropertyModel(myModel)); container.add( new Label("prop1"); new Label("prop2.name"); new Label("prop2.lastname") ); add(container); html was like this: <div wicket:id="container"> Prop1: <span wicket:id="prop1"></span> Prop2 name: <span wicket:id="prop2.name"></span> Prop2 lastname: <span wicket:id="prop2.lastname"></span> </div> So I decided to try to simplify the HTML code and created a TemplateMarkupComponent which basically uses the VariableInterpolator class and PropertyResolver: java looks like this: TemplateMarkupContainer container = new TemplateMarkupContainer("container", myModel); add(container); Html code: <div wicket:id="container"> Prop1: ${prop1} Prop2 name: ${prop2.name} Prop2 lastname: ${prop2.lastname} </div> To display the values the component apply the PropertyConverter, so fields are displayed with the correct format. It uses the same expressions that PropertyModel uses to get its properties. I think this could be used to render scripts as well. You can just remove the expression tag from HTML without having to change the java code. You can choose if and Exception should be raised if the Model doesn't contains the property, like the MapVariableInterpolator does. These two I am still thinking about: You can override the onValue(String expression, Object value) in order to modify the value that is rendered If you pass a Model with is not an Object with properties, like just a String or Int, you can render it by using ${this} It is just two classes: ModelVariableInterpolator.java TemplateMarkupContainer.java Do you think that this could be useful? What problems could be raised by this approach? -- Marcel Barbosa Pinto