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
> >
>

Reply via email to