Joe, I'll try to run your example shortly, but in the mean time...
Have you tried using a new BXMLSerializer instance to load each new BXML file? serializer = new BXMLSerializer(); Or to clear the namespace of the BXMLSerializer between uses? serializer.getNamespace().clear(); Chris On 19 April 2011 16:36, Joe Minichino - TechFort <[email protected]> wrote: > Hi Chris, > > thank you for your time and the quick answer. > Here's a very basic example, a window containing a button which is used to > load more bxml files. > First time i press the button I get the new panel added to the ui no > problem, the second time i get the exception under the class code > (complaining that the bxml:id testEventBtn is already in use). > > > joe > > // Bindable window... > > public class BindableWindow extends Window implements Bindable { > BXMLSerializer serializer = new BXMLSerializer(); > @BXML(id="mainPane") BoxPane mainPane = null; > @BXML PushButton testButton = null; > > @Override > public void initialize(Map<String, Object> arg0, > URL arg1, Resources arg2) { > testButton.getButtonPressListeners() > .add(new ButtonPressListener() { > @Override > public void buttonPressed(Button arg0) { > loadApp(); > } > }); > } > > > public void loadApp(){ > BoxPane boxpane; > try { > boxpane = (BoxPane) serializer.readObject( > getClass().getResource("sample.bxml") ); > mainPane.add(boxpane); > } catch (IOException e) { > .... > } > } > } > > //sample.xml > <BoxPane > xmlns="org.apache.pivot.wtk" > xmlns:bxml="http://pivot.apache.org/bxml" > > > <PusButton bxml:id="testEventBtn" buttonData="click me" /> > </BoxPane> > > > > The exception thrown: > > An error occurred at line number 20 in file .../sample.bxml: > org.apache.pivot.serialization.SerializationException: ID testEventBtn is > already in use. > at > org.apache.pivot.beans.BXMLSerializer.processAttributes(BXMLSerializer.java:934) > at > org.apache.pivot.beans.BXMLSerializer.processStartElement(BXMLSerializer.java:801) > at > org.apache.pivot.beans.BXMLSerializer.readObject(BXMLSerializer.java:435) > at > org.apache.pivot.beans.BXMLSerializer.readObject(BXMLSerializer.java:614) > at > org.apache.pivot.beans.BXMLSerializer.readObject(BXMLSerializer.java:587) > at > com.techfort.appwall.ui.BindableWindow.loadApp(BindableWindow.java:54) > at > com.techfort.appwall.ui.BindableWindow$1.buttonPressed(BindableWindow.java:39) > at > org.apache.pivot.wtk.Button$ButtonPressListenerList.buttonPressed(Button.java:194) > at org.apache.pivot.wtk.Button.press(Button.java:412) > at org.apache.pivot.wtk.PushButton.press(PushButton.java:70) > at > org.apache.pivot.wtk.skin.PushButtonSkin.mouseClick(PushButtonSkin.java:77) > at > org.apache.pivot.wtk.skin.terra.TerraPushButtonSkin.mouseClick(TerraPushButtonSkin.java:586) > at > org.apache.pivot.wtk.Component$ComponentMouseButtonListenerList.mouseClick(Component.java:483) > at org.apache.pivot.wtk.Component.mouseClick(Component.java:2777) > at org.apache.pivot.wtk.Container.mouseUp(Container.java:774) > at org.apache.pivot.wtk.Container.mouseUp(Container.java:759) > at org.apache.pivot.wtk.Container.mouseUp(Container.java:759) > at > org.apache.pivot.wtk.ApplicationContext$DisplayHost.processMouseEvent(ApplicationContext.java:914) > at java.awt.Component.processEvent(Component.java:6139) > at > org.apache.pivot.wtk.ApplicationContext$DisplayHost.processEvent(ApplicationContext.java:709) > at java.awt.Component.dispatchEventImpl(Component.java:4736) > at java.awt.Component.dispatchEvent(Component.java:4566) > at > java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4621) > at > java.awt.LightweightDispatcher.processMouseEvent(Container.java:4282) > at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4212) > at java.awt.Container.dispatchEventImpl(Container.java:2129) > at java.awt.Window.dispatchEventImpl(Window.java:2478) > at java.awt.Component.dispatchEvent(Component.java:4566) > at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:680) > at java.awt.EventQueue.access$000(EventQueue.java:86) > at java.awt.EventQueue$1.run(EventQueue.java:639) > at java.awt.EventQueue$1.run(EventQueue.java:637) > at java.security.AccessController.doPrivileged(Native Method) > at > java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) > at > java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98) > at java.awt.EventQueue$2.run(EventQueue.java:653) > at java.awt.EventQueue$2.run(EventQueue.java:651) > at java.security.AccessController.doPrivileged(Native Method) > at > java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) > at java.awt.EventQueue.dispatchEvent(EventQueue.java:650) > at > java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:296) > at > java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:211) > at > java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:201) > at > java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:196) > at > java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:188) > at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) > > > Chris Bartlett wrote: > >> Joe, >> >> Could you elaborate a little please? (Or better yet, provide a small >> example app - but hold off on that for now unless you can put one together >> without too much effort) >> >> Is an Exception thrown when you load the 'nested panel' BXML file using >> BXMLSerializer, or possibly when you try to add the serialized Component >> graph to the your 'main UI panel', or somewhere else again? >> >> http://pivot.apache.org/tutorials/bxml-primer.html >> BXMLSerializer handles a similar situation internally when <bxml:include >> inline="false"> is used to include additional BXML files into a parent BXML >> file. This ensures that each included BXML file has its own namespace and >> therefore avoids clashes. This allows the exact same BXML file to be >> included multiple times into the same parent BXML file without namespace >> collisions. >> >> I'm pretty sure there will be a way around this, but I'm not at a dev >> machine, so can't investigate right now. >> >> Chris >> >> On 19 April 2011 15:21, Joe Minichino - TechFort <[email protected]<mailto: >> [email protected]>> wrote: >> >> Hi, >> >> I am new to Pivot, but I am really impressed by it, well done. >> >> I have a main UI with a panel that hosts other panels. These nested >> panels are simply bxml files dynmically loaded at runtime through >> user input and added to the main view (say a user enters the name of >> the bxml file to load and that bxml gets added to the view). >> >> Problem is that if I try to load a bxml file that contains an id >> that's already in use the new bxml file won't load. >> >> I can see how this feature could be by design so my question is if >> there is anyway to enforce bxml:id scoping so that I won't have to >> deal with these type of id conflicts or keep track of the id's >> already in use? >> >> Thanks >> Joe >> >> >>
