GWT: Работа с пустыми ссылками на фабричные прокси-запросы - PullRequest
1 голос
/ 27 апреля 2011

У меня есть вид, который отображает данные учетной записи пользователя.Соответствующее действие запрашивает код на стороне сервера (для получения объекта учетной записи пользователя) через фабрику запросов GWT.Интерфейс представления расширяет интерфейс TakesValue , поэтому мой ViewImpl реализует метод setValue (UserAccountProxy).Как и предполагалось, этот метод используется для установки ссылки на объект, который будет отображаться в данный момент.

UserAccountProxy имеет много свойств, поэтому его прокси-сервер ссылается на многие другие прокси-объекты.Так, например, мы можем иметь: UserNameProxy, UserPasswordProxy, UserRolesProxy и так далее, инкапсулированные в UserAccountProxy.Почти каждый из этих прокси может быть нулевым в некоторых случаях (у пользователя не указаны роли, у пользователя нет аватара, не указана подпись ...).Кроме того, возможно, что соответствующее действие не будет запрашивать фабрику запросов для некоторой части свойств, и тогда эти свойства также будут нулевыми.

Если какое-либо из этих свойств (прокси) не равно нулю, тоон должен отображаться в представлении с использованием соответствующего виджета.

Самый простой и уродливый способ избежать исключения NullPointerException заключается в следующем:

public void setValue(UserAccountProxy account) {
   //getUserName() returns proxy which may be null
   if (account.getUserName() != null) { 
     setUserNameWidget(account.getUserName());
   }
   //getUserPassword() returns proxy which may be null
   if (account.getUserPassword() != null) {
     setUserPasswordWidget(account.getUserPassword());
   }
   // (....)
}

Конечно, я бы хотел избежатьтип кодирования, но я понятия не имею, как это сделать другим способом.

Заранее благодарен за любые подсказки.

1 Ответ

1 голос
/ 27 апреля 2011

Среда GWT Editor позволяет сократить количество кода для склеивания, который необходимо написать для связывания модели данных и пользовательского интерфейса.Существует тип RequestFactoryEditorDriver , который добавляет специфичные для RequestFactory функции в среду редактора.Использование адаптера OptionalFieldEditor позволит обнуляемым свойствам управлять созданием или удалением соответствующего виджета.

...