Hmm, looks like it is not supported:

from BXMLSerializer code, lines 1505-1511:

 if ((fieldModifiers & Modifier.PUBLIC) == 0) {
                    try {
                        field.setAccessible(true);
                    } catch (SecurityException exception) {
throw new BindException(fieldName + " is not accessible.");
                    }
                }

It just sets the field directly and ignores the existence of the setter.
Have you considered calling public setter by default (found according to the JavaBean naming convention), and only if the setter doesn't exist, trying to set the field directly? Should be pretty straightforward to implement. That would enable using the @BXML annotation in unsigned applets. Theoretically I could make the field public, and it would work now, but I write that in Scala and it doesn't support public fields - I can only provide a private field with a public getter and public setter.

Regards,
Piotr

W dniu 2011-10-31 15:09, Greg Brown pisze:
Sounds like a bug.

On Oct 31, 2011, at 9:41 AM, Piotr Kołaczkowski wrote:

Thanks, that works.
BTW: Why @BXML doesn't work in unsigned applets, although there is a public 
setter present?


W dniu 2011-10-31 14:00, Greg Brown pisze:
Try implementing Bindable in your root element and overriding initialize().

On Oct 31, 2011, at 8:46 AM, Piotr Kołaczkowski wrote:

Thanks, I tried that but the load method is not called. However, the 
constructor of the component is called, and the setter of the property is also 
called.
What can be a reason that the load method is not called?

Regards,
Piotr

W dniu 2011-10-30 21:11, anton dos santos pisze:
If your custom component is implemented by a BXML file and a java class you can 
do following:

in the calling BXML:

<bxml:include bxml:id="id1" src="../MyComp.bxml" customTitle="Hello1"/>
<bxml:include bxml:id="id2" src="../MyComp.bxml" customTitle="Hello2"/>

in MyComp.java, declare a variable with the same name as the parameter and use 
it in load() to initialize the component

@BXML
  public String customTitle;

  @Override
  public void load(Object context) {
     border.setHeading( customTitle);
  }

On 30/10/2011 19:46, Piotr Kołaczkowski wrote:
W dniu 2011-10-30 18:56, Edvin Syse pisze:
Is there a way to use BXML files as templates? I'd like to include two almost
identical component sets in the main window, differing with component ids
and probably a single label text.
It would be fairly trivial to modify the XML before you give it to the 
BXMLSerializer, so this wouldn't require any special framework support as far 
as I can see.

-- Edvin
Ok, and how to do that from another BXML file?
The BXML<include>   tag references just a plain text resource. Is there a way 
to intercept loading of the included file and modify it on the fly?

BTW: Regardless of how trivial this is to implement, not having this feature in 
the framework means adding quite a lot of accidental complexity to the project 
configuration.
Imagine almost every team rolling their own templating engine, slightly 
different from each other. I think this is not a top priority, but a really 
nice to have feature.

Regards,
Piotr








Reply via email to