That's weird... Here's an example from my code with some custom types:
public static final List<WeekDay> WEEK_DAY_SOURCE = List.of(...); In the TML: <t:loop t:source="prop:WEEK_DAY_SOURCE" t:value="prop:weekDay"> ... </t:loop> Works fine for me, but I'm running 5.8.2 with OpenJDK 17, not 11. On Tue, Aug 1, 2023 at 4:29 PM Jens Breitenstein <jb// j-b-s...@toc-mailserver.de> wrote: > Sorry, Ben, tried it, but this is not working. > > > private final String x = "..."; > public final String x = "..."; > > throws: "Update to non-static final field ...x... attempted from a > different method (initializeInstance) than the initializer method <init>" > which is correct, because the field isn't static. > > > Using > > private static final String x = "..."; > > works, but requires additional get method. > > > In contrast > > public static final String x = "..."; > > is not accessible from the page (tml). Exception is: > > "Exception assembling root component of page X: Could not convert 'x' > into a component parameter binding: Exception generating conduit for > expression 'x': Class X does not contain a property (or public field) > named 'x'. > > > Tested with T5.8.3 and OpenJDK 11.07 > > > Jens > > > > Am 01.08.23 um 15:29 schrieb Ben Weidig: > > Hi Jens, > > > > I was looking into static fields and the @Property annotation worker the > > other day but stopped, as I realized you can use "public static final" > > fields directly in the TML without any additional work. > > > > So the following code should be fine: > > > > public final String[] keys = new String[] { > > "A", "B", "C" > > }; > > > > Use it as usual, like "prop:keys" in the TML > > > > > > Private fields that are only exposed to the TML would be preferable, but > > it's a simple workaround, and I'm not sure how easy it would be to > > implement it in the PlasticClass transformation. > > > > The change in final handling is most likely related to an older ticket of > > mine > > > > https://issues.apache.org/jira/browse/TAP5-2630 > > > > Cheers > > Ben > > > > > > On Tue, Aug 1, 2023 at 2:57 PM Jens Breitenstein <jb// > > j-b-s...@toc-mailserver.de> wrote: > > > >> HI! > >> > >> I noticed due to JDK 11 there is a subtile change in handling of final > >> fields and initialization. > >> > >> On rare cases we used final fields including @Property(write = false), > >> which is no longer working. Example: > >> > >> @Property(write="false") private final String[] _keys = new > String[] { > >> "A", "B", "C" > >> }; > >> > >> This allowed us to initialize the field once, but still access it from > >> the page (tml). Using JDK 11 and T5.8.x this now throws an exception. > >> But modifying it to > >> > >> private static final String[] _keys = new String[] { > >> "A", "B", "C" > >> }; > >> > >> public String[] getKeys() { > >> return _keys; > >> }; > >> > >> requires an additional instance method, because @Property can't handle > >> static fields. Are there any plans to solve it by Tapestry itself (eg to > >> add this "get" method automatically while class transformation is > >> applyed in case a field is marked as static and and property)? > >> > >> Currently I do not see another workaround apart rewriting parts like > >> this, right? > >> > >> Thanks > >> > >> Jens > >> > >> > >> > >> --------------------------------------------------------------------- > >> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org > >> For additional commands, e-mail: users-h...@tapestry.apache.org > >> > >> > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org > For additional commands, e-mail: users-h...@tapestry.apache.org > >