This is default: xmlns:wicket="http://wicket.sourceforge.net This will change Wickets namespace: xmlns:sherpa="http://wicket.sourceforge.net But note that all tags must be changed now, not just the wicket:id attribute. And I'm fairly sure you'll stumble across some loose ends here. Many part of Wickets core are testing for the namespace, but not all.
Juergen On 10/5/06, Ernesto Reinaldo Barreiro <[EMAIL PROTECTED]> wrote:
Dear Juergen, Thanks for your answer and paying attention to my request! I have tested those changes on my toy application and they seem to have no other side effects... By the way do you know if it is possible to "force" wicket to use something different as the wicket:id for recognizing HTML/XML tags as wicket components? Not that we have anything against the wicket:id attribute but now that we are able to mock JSP-like tags (mainly because our clients are more used them) it would be nice to have a sherpa:id attribute as well: just to make more clear when are working with our own components. Thanks again! Ernesto On Thursday 05 October 2006 16:00, Juergen Donnerstag wrote: > It is the first time someone requested to remove the namespace from a > tag. I guess we didn't cover nor test the use case yet. Your changes > look ok to me and I'll make the changes in SVN trunk > > Juergen > > On 10/5/06, Ernesto Reinaldo Barreiro <[EMAIL PROTECTED]> wrote: > > I have found the following problem realted to namespaces in wickect 2.0. > > > > If I have a template file like > > > > <html xmlns:wicket="" > > xmlns:sherpa="http://www.isencia.com/timbuktu/sherpa"> <body> > > <wicket:panel> > > <sherpa:table cellpadding="0" cellspacing="0" > > wicket:id="messages"></sherpa:table> > > </wicket:panel> > > </body> > > </html> > > > > that I want is to transform it to > > > > <html xmlns:wicket="" > > xmlns:sherpa="http://www.isencia.com/timbuktu/sherpa"> <body> > > <table cellpadding="0" cellspacing="0" wicket:id="messages">The > > contents of my table dynamically generated here...</table> > > </body> > > </html> > > > > Then on my table component I do the following > > > > @Override > > protected void onComponentTag(ComponentTag tag) { > > if(tag.getNamespace().equals("sherpa")) { > > tag.setNamespace(null); > > } > > super.onComponentTag(tag); > > } > > > > to get rid of the sherpa namespace but then the generated markup is > > > > > > <html xmlns:wicket="" > > xmlns:sherpa="http://www.isencia.com/timbuktu/sherpa"> <body> > > <table cellpadding="0" cellspacing="0" wicket:id="messages">The > > contents of my table dymamically generated here...</sherpa:table> > > </body> > > </html> > > > > which is not exactly well formed XML. The same happens if instead of > > > > <sherpa:table cellpadding="0" cellspacing="0" > > wicket:id="messages"></sherpa:table> > > > > I write > > > > <sherpa:table cellpadding="0" cellspacing="0" wicket:id="messages"/> > > > > Am I doing something forbidden or is this a bug? > > > > After doing a bit of debugging I have found that there are to places were > > I have to alter the code on the class Component to get this working fine. > > Those are the methods > > > > final void renderClosingComponentTag(final MarkupStream markupStream, > > final ComponentTag openTag, final boolean > > renderTagOnly) { > > // Tag should be open tag and not openclose tag > > if (openTag.isOpen()) > > { > > // If we found a close tag and it closes the open > > tag, we're good if (markupStream.atCloseTag() && > > markupStream.getTag().closes(openTag)) { > > // Get the close tag from the stream > > ComponentTag closeTag = > > markupStream.getTag(); > > > > // If the open tag had its id changed > > if (openTag.getNameChanged()) > > { > > // change the id of the close tag > > closeTag = closeTag.mutable(); > > > > closeTag.setName(openTag.getName()); > > > > >> I HAVE TO ADD FOLLOWING CODE > > > > // change also the namespace if > > the name changed closeTag.setNamespace(openTag.getNamespace()); > > > > } > > > > // Render the close tag > > if (renderTagOnly == false) > > { > > renderComponentTag(closeTag); > > } > > markupStream.next(); > > } > > else > > { > > if (openTag.requiresCloseTag()) > > { > > // Missing close tag > > > > markupStream.throwMarkupException("Expected close tag for " + openTag); } > > } > > } > > } > > > > and > > > > public final void renderComponent(final MarkupStream markupStream) > > { > > this.markupIndex = markupStream.getCurrentIndex(); > > > > // Get mutable copy of next tag and apply the changes > > recorded in markupAttributes > > final ComponentTag openTag = markupStream.getTag(); > > final ComponentTag tag = openTag.mutable(); > > if (this.markupAttributes != null) > > { > > > > tag.getAttributes().putAll(this.markupAttributes.getChangeMap()); } > > > > // Call any tag handler > > onComponentTag(tag); > > > > // If we're an openclose tag > > if (!tag.isOpenClose() && !tag.isOpen()) > > { > > // We were something other than <tag> or <tag/> > > markupStream > > .throwMarkupException("Method > > renderComponent called on bad markup element: " > > + tag); > > } > > > > if (tag.isOpenClose() && openTag.isOpen()) > > { > > markupStream > > .throwMarkupException("You can not > > modify a open tag to open-close: " + tag); > > } > > > > try > > { > > // Render open tag > > if (getRenderBodyOnly() == false) > > { > > renderComponentTag(tag); > > } > > markupStream.next(); > > > > // Render the body only if open-body-close. Do not > > render if // open-close. > > if (tag.isOpen()) > > { > > // Render the body > > onComponentTagBody(markupStream, tag); > > } > > > > // Render close tag > > if (tag.isOpen()) > > { > > if (openTag.isOpen()) > > { > > > > renderClosingComponentTag(markupStream, tag, getRenderBodyOnly()); } > > else > > { > > // If a open-close tag has been to > > modified to be // open-body-close than a synthetic close tag must be // > > rendered. > > if (getRenderBodyOnly() == false) > > { > > // Close the manually > > opened panel tag. > > > > >> I HAVE TO ADD FOLLOWING > > >> CODE > > > > if(tag.getNameChanged()) > > > > getResponse().write(tag.syntheticCloseTagString()); else > > > > > > getResponse().write(openTag.syntheticCloseTagString()); } > > } > > } > > } > > catch (RuntimeException re) > > { > > if (re instanceof WicketRuntimeException || re > > instanceof AbortException) { > > throw re; > > } > > throw new WicketRuntimeException("Exception in > > rendering component: " + this, re); > > } > > } > > > > where the modifications I did are enclosed as > > > > >> I HAVE TO ADD FOLLOWING CODE > > > > I have tested on my application and it seems to work fine. Can any of the > > wicket mavens take a look to this? Please... And if they are fine could > > you include them on the trunk (or if I missunderstood it wrong just tell > > me which is the right way to achieve what I want!) > > > > Kind regards > > > > Ernesto
