<wicket:fragment wicket:id="edit"> edit </wicket:fragment>
<wicket:fragment wicket:id="view"> view </wicket:fragment>
</wicket:panel>
throws:
Caused by: java.text.ParseException: Unkown tag name with Wicket namespace: 'fragment'. Might be you haven't installed the appropriate resolver?
at wicket.markup.parser.filter.WicketTagIdentifier.nextTag(WicketTagIdentifier.java:104)
at wicket.markup.parser.filter.TagTypeHandler.nextTag(TagTypeHandler.java:83)
at wicket.markup.parser.filter.HtmlHandler.nextTag(HtmlHandler.java:86)
at wicket.markup.parser.filter.WicketRemoveTagHandler.nextTag(WicketRemoveTagHandler.java:70)
at wicket.markup.parser.filter.WicketLinkTagHandler.nextTag(WicketLinkTagHandler.java:101)
at wicket.markup.parser.filter.BodyOnLoadHandler.nextTag(BodyOnLoadHandler.java:75)
at wicket.markup.parser.filter.PrependContextPathHandler.nextTag(PrependContextPathHandler.java:109)
at wicket.markup.MarkupParser.parseMarkup(MarkupParser.java:250)
... 67 more
I'm not sure what the deal is.. this is RC3... although this works for me, and I can live with it for now:
<wicket:panel>
</wicket:panel>
<fragment wicket:id="edit"> edit </fragment>
<fragment wicket:id="view"> view </fragment>
I have that method working in other parts of my application. They are self-contained components that access the fragments in a listView. My "blocker" right now is using a different method: basically my container object can't add a fragment accessed from another component that is not in the hierarchy (because it doesn't need to be, only the fragment) Any thoughts on how to accomplish this?
FYI:
The design principal here is that I have a ProfileItemRenderer that accepts a ProfileItem. The ProfileItem can by anything from an image, to a blog, to a classified ad, etc, and the ProfileItemRenderer will instantiate these ProfileItem components on the fly (by querying the database for which items should be place in the user's profile). On a normal profile view, the ProfileItemRenderer will ask each ProfileItem for the "View" fragment. If the user wants to edit their profile, the ProfileItemRenderer will ask each ProfileItem for it's "Edit" fragment. Since many of these components are very simple/basic, it would be really helpful to get all the markup in one file.
Aaron
On Sun, 2006-05-07 at 23:16 -0700, Igor Vaynberg wrote:
it should work w/out the namespace
the problem is that the fragment tag is outside of the panel, it should be inside
so
<wicket:panel>
<wicket:fragment.....>
</wicket:fragment>
</wicket:panel>
try that and see if it does the trick.
-Igor
On 5/7/06, Aaron Hiniker <[EMAIL PROTECTED]> wrote:
Yes, the "fragment provider" is a Panel. The markup looks like this:
<wicket:panel>
</wicket:panel>
<fragment wicket:id="edit"> ... </fragment>
<fragment wicket:id="view"> ... </fragment>
Since the component is providing fragments only, the "main" markup content is empty and I really don't wish/need to render it. Only the fragments that the container selects (Edit/View/etc).
Btw.. wicket doesn't recognize <wicket:fragment> only <fragment> due to some namespace code in WicketTag or whatever. I've tried adding a namespace to <html> with no luck. The fragments *do* load using <fragment>, it just doesn't seem like the intended behavior.
Aaron
On Sun, 2006-05-07 at 23:03 -0700, Igor Vaynberg wrote:
the only components that can supply fragments are the ones that have markup themselves - ie a page, a panel, or a border because the fragment has to live in someone's markup and those are the only ones that have it.
so is your component a panel, a border, or a page?
-Igor
On 5/7/06, Aaron Hiniker <[EMAIL PROTECTED] > wrote:
I am trying to encapsulate Edit/View/Select markup into one Component. I want to set the mode, then add the Fragment to the parent container.
My first attempts went something like this:
parent.add( component.getFragment( "markupId", Mode.Edit ) );... and in the component#getFragment(), something like this:
public Component getFragment( String id, Mode mode ) { if ( mode == Mode.Edit ) return new Fragment( id, "edit", this ); // <-- the "this" forces markup from this component, right? return new Fragment( id, "view" ); } This throws a NPE: java.lang.NullPointerException at wicket.markup.html.panel.Fragment.renderFragment(Fragment.java:218) at wicket.markup.html.panel.Fragment.onComponentTagBody(Fragment.java:202) at wicket.Component.renderComponent(Component.java:1662) at wicket.MarkupContainer.onRender(MarkupContainer.java:917) at wicket.Component.render(Component.java:1507) at wicket.MarkupContainer.renderNext(MarkupContainer.java:1324) .... more .... I saw a recent commit to Fragment#onComponentTagBody() by Eelco that will throw a more descriptive exception instead of this NPE indicating if the markup could not be found. Specifically, in the source code it says that the "component used to load the fragment" must be in the page heirarchy. Is this true? A component cannot just provide fragments to container in the manner am I trying to illustrate above? I basically need Edit/View/Select versions of a component and I would like to put them all into the same markup file. Aaron
