Ahh, yeah there is something there..
And yes it's a very good idea to expose the id to the method like
getComponents(String id)
I think this is also the way I did with the accordion in stuff.
John Krasnay wrote:
Careful! ChildPage.getComponents() is invoked before ChildPage's
constructor. This will trip you up sooner or later.
You can easily fix this with a model:
IModel componentsModel = new AbstractReadOnlyModel() {
public Object getObject() { return getComponents(); }
}
add(new ListView("listview", componentsModel) { ... });
Personally, I prefer to use a RepeatingView in this sort of situation.
Just create the RepeatingView in the base class, then provide an add
method for subclasses to call to add components directly to the
RepeatingView. (I also provide a method that wraps
RepeatingView.newChildId.) This approach avoids the intermediate list,
the anonymous inner ListView subclass, and the problem described above.
jk
On Wed, Dec 10, 2008 at 04:16:31PM -0800, smackie604 wrote:
Thank you Nino!
The solution could not have been any easier:) Here is how I did this incase
anyone else starts thinking of complicated solutions like myself:
ParentPage.java
----------------
public abstract class ParentPage extends WebPage
{
public static String COMPONENT_ID = "component";
public ParentPage()
{
add( new ListView<Component>( "listview", getComponents() )
{
protected void populateItem( ListItem<Component> item )
{
item.add( item.getModel().getObject() );
}
} );
}
protected abstract List<Component> getComponents();
}
ParentPage.html
---------------
<html>
<head>
<title></title>
</head>
<body>
<div wicket:id="component">This is a component</div>
</body>
</html>
ChildPage.java
--------------
public class ChildPage extends ParentPage
{
protected List<Component> getComponents()
{
List <Component> l = new ArrayList<Component>();
l.add( new Label(COMPONENT_ID, "Component 1") );
l.add( new Label(COMPONENT_ID, "Component 2") );
l.add( new Label(COMPONENT_ID, "Component 3") );
return l;
}
}
Nino.Martinez wrote:
Scott,
Think inheritance :)
Just write a super which has abstract methods that returns components
for c1..c4() and thats it.. no need for trickery with
IMarkupResourceStreamProvider ...
Should I elaborate more?
You could also take a look at the wicketstuff accordion thing, it does
something along these lines[1]...
1=http://wicketstuff.org/confluence/display/STUFFWIKI/wicket-contrib-accordion
regards
smackie604 wrote:
Hi,
My team has adopted wicket as it's web framework and we have been busy
creating a lot of interesting Panels to build pages for our product. It
is
turning out that most of the time all the components on the page are
Panels
and we end up with a situation like this:
MyPage.java
--------------
public class MyPage extends BasePage
{
MyPage()
{
add(SomePanel("c1"));
add(SomePanel("c2"));
add(SomePanel("c3"));
add(SomePanel("c4"));
}
}
MyPage.html
---------------
<wicket:extend>
<wicket:container wicket:id="c1"/>
<wicket:container wicket:id="c2"/>
<wicket:container wicket:id="c3"/>
<wicket:container wicket:id="c4"/>
</wicket:extend>
It would be nice if we didn't have to write html files for pages in these
situations and instead just do something like this:
MyPage.java
--------------
public class MyPage extends BasePage
{
MyPage()
{
addToRepeater(SomePanel("c1"));
addToRepeater(SomePanel("c2"));
addToRepeater(SomePanel("c3"));
addToRepeater(SomePanel("c4"));
}
}
Where BasePage will have a method called addToRepeater which just adds
the
component to the repeater.
I see we could do some trickery by implementing
IMarkupResourceStreamProvider on the BasePage to force the template of
it's
child classes to always use BasePage.html. I'm not sure this is the best
way of doing this, does anyone have any comments on using this approach?
Thanks,
Scott
--
-Wicket for love
Nino Martinez Wael
Java Specialist @ Jayway DK
http://www.jayway.dk
+45 2936 7684
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
--
View this message in context:
http://www.nabble.com/Child-page-with-no-html-tp20945577p20947047.html
Sent from the Wicket - User mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
--
-Wicket for love
Nino Martinez Wael
Java Specialist @ Jayway DK
http://www.jayway.dk
+45 2936 7684
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]