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
>>
>>
>>

Reply via email to