SeasarのpublicフィールドでFormTableを使う
FormTableにコントロールカラムを配置するためには、通常のTableで使用するColumnの替わりにFieldColumnを使用する必要がありますが、これはSeasarで推奨されるpublicフィールドに対応していません。
publicフィールドに対応させるには、FieldColumnを継承し、getPropertyメソッドをオーバーライドして、publicフィールドに対応させなければいけません。
public class PublicFieldFormTableColumn extends FieldColumn { ... @Override public Object getProperty(String name, Object row) { try { String[] names = new String[] { name }; if (name.indexOf('.') >= 0) { names = name.split("\\."); } Class<?> target = row.getClass(); Object value = row; for (String propertyName : names) { Field field = target.getField(propertyName); value = field.get(value); target = field.getType(); } return value; } catch (Exception ex) { throw new RuntimeException(ex); } } }
なおこれは、S2Clickに含まれるPublicFieldColumnの実装方法をそのまま用いています。