Hi, I have a problem with the Multifield with FormBinding or FormValidation Validation.
I have a FormPanel with 3 Fields : name, description and a Multifield which contains another name & description field.
The model I try to bind is simple as well (see a the end of the Test Class), and I try to bind a property (description) from a ModelB contained in ModelA.
1°) The problem is the binding works for the 2 first fields, but not on the MultiField.
2°) When the fields from multifield are empty, and you click on the button, only the first field is valid, not both, is that a normal behavior ?
I guess i'm doing something wrong, but what?
Thanks again.
Code:
public class Test implements EntryPoint
{
/**
* This is the entry point method.
*/
public void onModuleLoad()
{
final FormPanel fp = new FormPanel();
fp.setSize(640, 200);
final TextField<String> nameField = new TextField<String>();
nameField.setName(ModelA.NAME);
nameField.setFieldLabel("Name");
nameField.setAllowBlank(false);
final TextField<String> descriptionField = new TextField<String>();
descriptionField.setName(ModelA.MODELB + "." + ModelB.DESCRIPTION);
descriptionField.setFieldLabel("Description");
descriptionField.setAllowBlank(false);
final TextField<String> nameFieldForMultiField = new TextField<String>();
nameFieldForMultiField.setName(ModelA.NAME);
nameFieldForMultiField.setAllowBlank(false);
final TextField<String> descriptionFieldForMultiField = new TextField<String>();
descriptionFieldForMultiField.setName(ModelA.MODELB + "." + ModelB.DESCRIPTION);
descriptionFieldForMultiField.setAllowBlank(false);
MultiField<String> multiField = new MultiField<String>("MultiField", nameFieldForMultiField, descriptionFieldForMultiField);
multiField.setResizeFields(true);
multiField.setSpacing(10);
fp.add(nameField, new FormData("80%"));
fp.add(descriptionField, new FormData("80%"));
fp.add(multiField, new FormData("80%"));
Button validForm = new Button("Valid Form");
validForm.addSelectionListener(new SelectionListener<ButtonEvent>()
{
@Override
public void componentSelected(ButtonEvent ce)
{
fp.isValid();
}
});
fp.addButton(validForm);
final FormBinding binding = new FormBinding(fp, true);
ModelA modelA = new ModelA("Model A", new ModelB("Description B"));
binding.bind(modelA);
RootPanel.get().add(fp);
}
private class ModelA extends BaseModel
{
/** TODO Provide comment for serialVersionUID field */
private static final long serialVersionUID = 1L;
public static final String NAME = "name";
public static final String MODELB = "modelB";
public ModelA()
{
}
public ModelA(String name, ModelB description)
{
this();
set(NAME, name);
set(MODELB, description);
}
}
private class ModelB extends BaseModel
{
/** TODO Provide comment for serialVersionUID field */
private static final long serialVersionUID = 1L;
public static final String DESCRIPTION = "desc";
public ModelB()
{
}
public ModelB(String description)
{
this();
set(DESCRIPTION, description);
}
}
}