这是我的对象类:
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;
}
}
我将它添加到速度上下文中:
Address theAddress = new Address("123 Fake St", "Springfield", "SP123");
context.put("TheAddress", theAddress);
但是,在编写模板时,以下内容不会呈现地址字段(但是,当我将getter添加到Address类时它可以正常工作)
<Address>
<Line1>${TheAddress.line1}</Line1>
<Town>${TheAddress.town}</Town>
<Postcode>${TheAddress.postcode}</Postcode>
</Address>
是否可以在不添加getter的情况下访问Velocity对象的公共字段?
答案 0 :(得分:4)
默认不是。您需要配置不同的Uberspect实现。
答案 1 :(得分:4)
Velocity user guide表明这是不可能的。引用:
[Velocity]根据几个已建立的命名约定尝试不同的替代方案。确切的查找顺序取决于属性名称是否以大写字母开头。对于小写名称,例如$ customer.address,序列为
对于像$ customer.Address这样的大写属性名称,它略有不同:
答案 2 :(得分:0)
我愿意
import org.apache.velocity.util.introspection.UberspectImpl;
import org.apache.velocity.util.introspection.UberspectPublicFields;
....
properties.setProperty("runtime.introspector.uberspect",
UberspectImpl.class.getName() + ", " +
UberspectPublicFields.class.getName());
一切正常!!!