I would agree with Stefano, that is a very nice feature to have if labels can be also based on domain object classes. As the client name will eventually be put on many other forms that display other info related to the client. So, we don't have to add the label for each form in the message file.
I have just got Ollie's update from CVS, when I run the app, I got this exception.
Code:
java.lang.ArrayIndexOutOfBoundsException: 2
at org.springframework.binding.form.support.MessageSourceFormPropertyFaceDescriptorSource.insertKeys(MessageSourceFormPropertyFaceDescriptorSource.java:167)
at org.springframework.binding.form.support.MessageSourceFormPropertyFaceDescriptorSource.getMessageKeys(MessageSourceFormPropertyFaceDescriptorSource.java:157)
at org.springframework.binding.form.support.MessageSourceFormPropertyFaceDescriptorSource.getMessage(MessageSourceFormPropertyFaceDescriptorSource.java:137)
at org.springframework.binding.form.support.MessageSourceFormPropertyFaceDescriptorSource.loadFormPropertyFaceDescriptor(MessageSourceFormPropertyFaceDescriptorSource.java:89)
at org.springframework.binding.form.support.AbstractCachingPropertyFaceDescriptorSource.getFormPropertyFaceDescriptor(AbstractCachingPropertyFaceDescriptorSource.java:56)
at org.springframework.binding.form.support.AbstractFormModel.getFormPropertyFaceDescriptor(AbstractFormModel.java:200)
at org.springframework.richclient.forms.SwingFormModel.getFormPropertyFaceDescriptor(SwingFormModel.java:302)
at org.springframework.richclient.forms.SwingFormModel.createLabel(SwingFormModel.java:465)
at org.springframework.richclient.form.builder.AbstractFormBuilder.getLabelFor(AbstractFormBuilder.java:86)
at org.springframework.richclient.forms.JGoodiesBeanFormBuilder.add(JGoodiesBeanFormBuilder.java:59)
...
The problem seems to be in the class MessageSourceFormPropertyFaceDescriptorSource
Code:
protected String[] getMessageKeys(FormModel formModel, String formPropertyPath, String faceDescriptorProperty) {
boolean hasFormId = StringUtils.hasText(formModel.getId());
String[] formPropertyPathElements = StringUtils.delimitedListToStringArray(formPropertyPath, ".");
String[] keys = new String[hasFormId ? 2*formPropertyPathElements.length : formPropertyPathElements.length];
int keyCount = 0;
if (hasFormId) {
String prefix = formModel.getId() + '.';
insertKeys(keys, 0, prefix, formPropertyPathElements, faceDescriptorProperty);
}
insertKeys(keys, formPropertyPathElements.length, "", formPropertyPathElements, faceDescriptorProperty);
return keys;
}
My form might not have a form id and using formPropertyPathElements.length as startIndex throws that exception. The proposed fix is
Code:
int startIndex = 0;
if (hasFormId) {
String prefix = formModel.getId() + '.';
insertKeys(keys, startIndex, prefix, formPropertyPathElements, faceDescriptorProperty);
startIndex = formPropertyPathElements.length;
}
insertKeys(keys, startIndex, "", formPropertyPathElements, faceDescriptorProperty);
return keys;