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