Here is my object class:
public class Address
{
public final String line1;
public final String town;
public final String postcode;
public Address(final String line1, final String town, final String postcode)
{
this.line1 = line1;
this.town = town;
this.postcode = postcode;
}
}
I add it to the velocity context like this:
Address theAddress = new Address("123 Fake St", "Springfield", "SP123");
context.put("TheAddress", theAddress);
However, when writing the template, the following will not render the address fields (however, it works fine when I add getters to the Address class)
<Address>
<Line1>${TheAddress.line1}</Line1>
<Town>${TheAddress.town}</Town>
<Postcode>${TheAddress.postcode}</Postcode>
</Address>
Is it possible to access public fields on objects from Velocity without adding getters?
Not by default. You need to configure a different Uberspect implementation.
The Velocity user guide suggests it's not possible. Quote:
[Velocity] tries out different alternatives based on several established naming conventions. The exact lookup sequence depends on whether or not the property name starts with an upper-case letter. For lower-case names, such as $customer.address, the sequence is
For upper-case property names like $customer.Address, it is slightly different:
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With