Thank you Dan. I will try DTO approach and get back to you. Cheers, Jayesh
On Sat, May 11, 2019, 21:53 Dan Haywood <[email protected]> wrote: > Hi Jayesh, > > The framework determines the object type from the URL and uses the rest of > the id to recreate the object. How the id is used depends on whether the > object type is an entity or a view model. > > In the case of entities, this is used to query the database. In the case of > view models, though, these objects aren't persisted as such. Instead they > are serialised into their id, so the id actually *is"* the state that was > in view model, in effect a memento. > > There are several ways to implement a view model. One way is to implement > the ViewModel interface, which means you have full control over the > contents of the id, but also full responsibility for recreating the state. > > A second option - which from your question I'm guessing is what you might > have done - is to annotate either with @ViewModel or > @DomainObject(nature=VIEW_MODEL), these are equivalent. This will serialise > the state of all properties (as rendered in the UI), but importantly any > collections are ignored. The reason I'm guessing that this is what you've > done is this last point. > > A third option, and the one that I prefer to do, is to annotate the object > as a jaxb DTO (@XmlRootElement etc). This has the benefit that the state of > any collections will also be captured, just do long as the jaxb annotations > are correct. > > One possible issue you might hit if using jaxb, or in general if the state > to be serialised is very large, is that a URL can only be about 8000 > characters in length. If you hit this as an issue, then you can implement > the UrlEncodingService SPI, where your implementation takes responsibility > for caching the state somehow serverside and providing some sort of > identifier to that state, eg a UUID. > > Writing this on my phone, so can't provide you with any links to docs, but > hopefully that helps > > Cheers, > Dan. > > . > > > n Sat, 11 May 2019, 05:37 Jayesh Prajapati, <[email protected]> wrote: > > > Hi, > > > > *Requirement* > > I have a HomePageViewModel where there is one action (button) that does > > some processing and return another view model PendingApprovalViewModel. > > This PendingApprovalViewModel contains a collection of > > TransactionViewModel. For this TransactionViewModel there is a bulk > action > > as "Approve". > > > > 1) HomePageViewModel#process() : PendingApprovalViewModel > > 2) PendingApprovalViewModel#pendingApprovalTransaction <- > > Collection<TransactionViewModel> > > 3) TransactionViewModel#approve(Collection<TransactionViewModel>):void > > 4) TransactionViewModel#id, label, description, money, valueDate, etc. > > > > Objective is to show a table/grid of transactions with checkbox and let > > user select desired transaction record and click on "Approve" > > action/button. > > > > *Problem Statement* > > After processing the PendingApprovalViewModel is returned with > transaction > > filled in it however, when PendingApprovalViewModel is rendered > application > > seems to create new instance of PendingApprovalViewModel, instead of > > rendering the original view model that was returned. > > > > When I return Collection<TransactionViewModel> it render all the > > TransactionViewModel correctly but without checkbox and "Approve" > > button/action. > > > > Looks like I am missing something very fundamental w.r.to ViewModel. May > > be > > I need access to request or session where I can store these > > TransactionViewModel and amend PendingApprovalViewModel to get it from > that > > store and return. > > > > Any advise/help on this will be great. > > > > *Apache ISIS version : 2.0.0-M1* > > > > Thank You, > > Jayesh > > >
