私は、顧客のライセンスの編集を処理するこのListEditorを持っています。私CustomerEditor
の場合LicensesEditor
、これはタイプのパスライセンスにバインドされていますList<License>>
。
顧客(1)->(多くの)ライセンス(java.util.List)
現在、検証ルールでは、顧客ごとに少なくとも1つのライセンスが必要であると規定されています。制約違反は完全に機能します。しかし、ListEditorにHasEditorErrorsを実装するにはどうすればよいですか...独自のエラーマーキングを提供したいと思います。
HasEditorErrors <T>のジェネリックパラメーターTにどのタイプを注入しますか?
public interface HasEditorErrors<T> extends Editor<T>
ListEditorの署名は次のとおりです...
public class LicensesEditor extends Composite implements IsEditor<ListEditor<License, LicenseInListEditor>>
HasEditorErrors<List<License>>
実行時にエラーが発生する実装を試みました:
[デバッグ][klawtapp]-ライセンスへの降順[エラー][klawtapp]-プロキシタイプjava.util.Listのパスエディターのゲッターが見つかりませんでした
実装すればHasEditorErrors<LicensesEditor>
[エラー][klawtapp]プロキシタイプcom.klawt.screen.ui.customers.LicensesEditorでパスエディターのゲッターが見つかりませんでした
実装されたインターフェイスとしてHasEditorErrorsに疑問符を付けると、コンパイル時エラーが発生します。
タイプLicensesEditorは、HasEditorErrorsを拡張または実装できません。スーパータイプはワイルドカードLicensesEditor.javaを指定できません
誰か?
更新、以下の完全なコード:
public class LicensesEditor extends Composite implements IsEditor<ListEditor<License, LicenseInListEditor>> {
@UiField
Image validationErrorIcon;
interface LicensesEditorUiBinder extends UiBinder<Widget, LicensesEditor> {
}
private static LicensesEditorUiBinder uiBinder = GWT.create(LicensesEditorUiBinder.class);
@UiField
VerticalPanel container;
ListEditor<License, LicenseInListEditor> editor;
public LicensesEditor() {
initWidget(uiBinder.createAndBindUi(this));
editor = ListEditor.of(new LicenseInListEditorSource());
clearErrors();
}
@Override
public ListEditor<License, LicenseInListEditor> asEditor() {
return editor;
}
public void addLicense(License emailAddress) {
editor.getList().add(emailAddress);
if (emailAddress.getAdministrator()) {
setPrimary(editor.getList().size() - 1);
}
}
public void remove(int index) {
editor.getList().remove(index);
}
public void update(int index, License emailAddress) {
editor.getList().remove(index);
editor.getList().add(index, emailAddress);
}
/**
* make the phonenumber at the index the primary phonenumber and the other
* phone numbers not primary.
*
* @param index
*/
public void setPrimary(int index) {
int loop = 0;
for (License emailAddress : Collections.unmodifiableList(editor.getList())) {
emailAddress.setAdministrator(index == loop);
update(loop, emailAddress);
loop++;
}
}
private class LicenseInListEditorSource extends EditorSource<LicenseInListEditor> {
@Override
public LicenseInListEditor create(final int index) {
LicenseInListEditor editor = new LicenseInListEditor();
editor.addDeleteHandler(new ListEditorDeleteEventHandler() {
@Override
public void onEditorEvent(ListEditorDeleteEvent event) {
remove(index);
}
});
editor.addUpdateHandler(new EditorUpdateEventHandler() {
@Override
public void onEditorUpdate(EditorUpdateEvent event) {
License emailAddress = (License) event.getUpdated();
update(index, emailAddress);
if (emailAddress.getAdministrator()) {
setPrimary(index);
}
}
});
container.insert(editor, index);
updateOddEven();
return editor;
}
@Override
public void dispose(LicenseInListEditor subEditor) {
container.remove(subEditor);
updateOddEven();
}
@Override
public void setIndex(LicenseInListEditor editor, int index) {
container.insert(editor, index);
updateOddEven();
}
public void updateOddEven() {
for (int widgetIndex = 0; widgetIndex < container.getWidgetCount(); widgetIndex++) {
container.getWidget(widgetIndex).setStyleName(KlawtResources.INSTANCE.form().listEditorEven(),
(widgetIndex % 2 == 0));
container.getWidget(widgetIndex).setStyleName(KlawtResources.INSTANCE.form().listEditorOdd(),
(widgetIndex % 2 == 1));
}
}
}
// @Override
// public void showErrors(List<EditorError> errors) {
// StringBuilder sb = new StringBuilder();
// int errorCount = 0;
// for (EditorError editorError : errors) {
// if (errorCount > 0) {
// sb.append("\n");
// }
// errorCount++;
// sb.append(editorError.getMessage());
// }
// if (errorCount == 0) {
// clearErrors();
// } else {
// container.setStyleName(KlawtResources.INSTANCE.form().formError(), true);
// validationErrorIcon.setVisible(true);
// validationErrorIcon.setTitle(sb.toString());
// }
// }
private void clearErrors() {
container.setStyleName(KlawtResources.INSTANCE.form().formError(), false);
validationErrorIcon.setVisible(false);
validationErrorIcon.setTitle("");
}
}