You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@pivot.apache.org by Joe Minichino - TechFort <jo...@dsforge.net> on 2011/04/19 10:21:34 UTC
bxml:id scoping
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
Re: bxml:id scoping
Posted by Chris Bartlett <cb...@gmail.com>.
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 <jo...@dsforge.net> 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 <joe@dsforge.net<mailto:
>> joe@dsforge.net>> 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
>> <joe@dsforge.net <ma...@dsforge.net>
>> <mailto:joe@dsforge.net <ma...@dsforge.net>>> 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
>>
>>
>>
>>
Re: bxml:id scoping
Posted by Joe Minichino - TechFort <jo...@dsforge.net>.
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 <joe@dsforge.net
> <ma...@dsforge.net>> 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
> <joe@dsforge.net <ma...@dsforge.net>
> <mailto:joe@dsforge.net <ma...@dsforge.net>>> 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
>
>
>
Re: bxml:id scoping
Posted by Chris Bartlett <cb...@gmail.com>.
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 <jo...@dsforge.net> 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 <joe@dsforge.net<mailto:
>> joe@dsforge.net>> 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
>>
>>
>>
Re: bxml:id scoping
Posted by Joe Minichino - TechFort <jo...@dsforge.net>.
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 <joe@dsforge.net
> <ma...@dsforge.net>> 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
>
>
Re: bxml:id scoping
Posted by Chris Bartlett <cb...@gmail.com>.
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 <jo...@dsforge.net> 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
>
>