Glad to be of assistance. And thanks for sharing the follow up which might well help others in the future.
On 19 April 2011 17:21, Joe Minichino - TechFort <[email protected]> wrote: > Hi Chris, > > thank you for the solution, using a new serializer did it. > > For your information and future reference: > My sample bxml contained a pushbutton and a label, pressing the button > would update the label. > > If I load two of these panels I now have two buttons and two labels. If i > do > serializer.getNamespace().clear(); > > and press a button then both labels in both panels would be updated (which > is incorrect) while creating a new instance of the serializer makes it > behave correctly. > > Thanks, > > Joe > > > Chris Bartlett wrote: > >> 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]<mailto: >> [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]> >> <mailto:[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 >> >> >> >>
