On Monday, June 27, 2011 12:40:05 PM UTC+2, Ryan McFall wrote:
I have two domain objects that implement the same interface on the
server, and a third class that contains a (heterogeneous) List of
those objects. I need to be able to expose this list on the client
side. The domain objects do not share a common super-class (they
instead delegate the common functionality to another object).
Given that all proxy interfaces are required to extend BaseProxy, I
cannot figure out how to write multiple proxies that will have a
parent interface in common. I tried making a base interface that both
proxies extend, but that base interface must extend EntityProxy, and
the GWT compiler complains if you have an interface that extends
EntityProxy but does not have a ProxyFor annotation.
The interface need not extend EntityProxy, you can have:
interface BaseInterface { ... }
interface FooProxy extends BaseInterface, EntityProxy { }
interface BarProxy extends BaseInterface, EntityProxy { }
...but then you obviously cannot have a proxy declare a list that contain both FooProxy and BarProxy, as a Collection<BaseInterface> would be rejected because BaseInterface doesn't extend EntityProxy or ValueProxy.
BUT!
- The hierarchy of proxy interfaces need not mimic the one of domain objects on the server-side. You could have "interface BarProxy extends FooProxy" for example.
- or, because you can have more than one proxy interface for the same domain object, you could annotate the base interface with a @ProxyFor for one of the domain class.
I am wondering (although I suspect the answer is no) whether I can
have a single interface declare that it is a proxy for multiple
entities. If not, other ideas for making this work are welcome.
You're right: an interface can only map to a single domain class. Moreover, you cannot use an interface in a @ProxyFor, as the RequestFactoryInterfaceValidator used by the RequestFactoryServlet will ultimately flag it as an error (so you unfortunately cannot use the interface implemented by both your domain objects).
RequestFactory does not (yet) support polymorphism, so your collection can only ever contain a single "interface".
Not sure there's a solution to your problem besides refactoring your domain classes (but maybe if you share a bit more information, maybe there's a solution)
-- You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group.
To view this discussion on the web visit https://groups.google.com/d/msg/google-web-toolkit/-/FWl9h7WlrrkJ.
To post to this group, send email to google-web-toolkit@googlegroups.com.
To unsubscribe from this group, send email to google-web-toolkit+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.
No comments:
Post a Comment