我有一个显示用户帐户详细信息的视图。相应的活动通过GWT请求工厂询问服务器端代码(以便检索用户帐户对象)。 View接口扩展TakesValue< T>接口,所以我的ViewImpl< UserAccountProxy>实现setValue(UserAccountProxy)方法。 按照预期,此方法用于设置对当前将显示的对象的引用。
UserAccountProxy具有许多属性,因此其代理引用了许多其他代理对象。因此,例如我们可以将:UserNameProxy,UserPasswordProxy,UserRolesProxy等封装在UserAccountProxy中。 在某些情况下,几乎每个代理都可能为空(用户没有指定角色,用户没有头像,没有指定签名......)。 此外,相应的活动可能不会向请求工厂询问某些属性,然后,这些属性也将为空。
如果这些属性(代理)中的任何一个不为null,则应使用适当的小部件在视图中显示它。
避免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());
}
// (....)
}
当然,我想避免这种类型的编码,但我不知道如何以其他方式做到这一点。
提前感谢任何提示。
答案 0 :(得分:1)
GWT Editor framework可以减少您需要编写的粘合代码量,以便将数据模型和UI绑定在一起。有一个RequestFactoryEditorDriver类型,它将RequestFactory特有的功能添加到Editor框架中。使用OptionalFieldEditor适配器将允许可空属性控制是否创建或丢弃相应的小部件。