Glad you got to a solution, Erik, Cheers Dan
On 7 April 2015 at 10:31, Erik de Hair <[email protected]> wrote: > > On 04/03/2015 09:03 AM, Erik de Hair wrote: > >> >> >>> Then the question is how to hold that server-side state. An HTTP Session >>> object is one option; the other is to store the data in the database. >>> That >>> basically means converting the view model into an entity (analogous to a >>> shopping cart entity); you could have some mechanism to clean up such >>> session entities after a day or two. >>> >> My architecture didn't work correctly. I tried to put the data in the > memento as json-object but this way the memento got to big, and this gives > persisting problems for the auditing/publishing services. Right now I'm > putting the same data in the HTTP session and this works as it should be. > > Thanks for your help, > Erik > > > >>> Hope that helps provide some ideas... >>> >>> Cheers >>> Dan >>> >>> Hi Dan, >> >> Thanks for your ideas. In the meantime I was changing the architecture of >> the view model calling the web service. I let the web service return a json >> string of al data to be returned and populate the datatables in the view >> model by reconstructing view models based on this json string contained in >> the view model memento. >> >> The web service will now only be called by the action asking for web >> service parameters. >> >> Erik >> >>> >>> On 1 April 2015 at 11:33, Erik de Hair <[email protected]> wrote: >>> >>> On 03/27/2015 12:26 PM, Dan Haywood wrote: >>>> >>>> Hi Erik, >>>>> >>>>> On 25 March 2015 at 12:42, Erik de Hair <[email protected]> wrote: >>>>> >>>>> Hi, >>>>> >>>>>> I have to call I web service from a view model but, when opening the >>>>>> view >>>>>> model, the call to the web service is called twice. It doesn't matter >>>>>> if >>>>>> the call is in de viewmodelinit or in some other method. May be >>>>>> there's >>>>>> some way to track the state of the view model and let whether or not >>>>>> the >>>>>> call is executed depend on that? >>>>>> >>>>>> My guess is that you are seeing the view model called twice because >>>>>> we >>>>>> >>>>> use >>>>> (Wicket's support for) the redirect-after-post pattern. >>>>> >>>>> That is, when the action is invoked you are instantiating the view >>>>> model >>>>> (which calls the webservice), and then we return a 302 redirect to the >>>>> browser so that it then re-requests the same URL, causing the view >>>>> model >>>>> to >>>>> be recreated (and that webservice called). >>>>> >>>>> Perhaps you could confirm if that's what's happening? >>>>> >>>>> The following is happening... >>>> >>>> In the initial state the view model is rendered and the data that is >>>> needed to call the web service is already available from the view model >>>> memento. (This means that when refreshing the page the web service will >>>> be >>>> called again. This is not much of a problem.) >>>> >>>> Now, when clicking** the action button that opens the action for >>>> re-entering the web service parameters, a request for the view model is >>>> done: >>>> >>>> 0:0:0:0:0:0:0:1 - - [01/Apr/2015:12:04:09 +0200] "GET >>>> /portal/wicket/entity/*nl.pocos.dom.access.availability.PostalCodeCheck: >>>> >>>> PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPG1lbWVudG8-PGpzb24- >>>> >>>> eyJwb3N0YWxDb2RlIjoiNTYxNEFFIiwiaG91c2VOdW1iZXIiOiIxNTIifTwv >>>> anNvbj48L21lbWVudG8-?6-1.IBehaviorListener.0-theme-entity-entity~0- >>>> entityPropertiesAndCollections-entityProperties-leftColumn- >>>> memberGroup-1-properties-4-property-scalarIfRegular-additionalLinks- >>>> additionalLinkList-additionalLinkItem-0-additionalLink&_=1427882228283 >>>> HTTP/1.1" 200 12838 http-bio-8081-exec-4 2303 >>>> >>>> This way the web service is called again because the previous web >>>> service >>>> parameters are still available from the view model memento. >>>> >>>> After submitting the following requests are handled: >>>> >>>> 0:0:0:0:0:0:0:1 - - [01/Apr/2015:12:06:17 +0200] "POST >>>> /portal/wicket/entity/*nl.pocos.dom.access.availability.PostalCodeCheck: >>>> >>>> PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPG1lbWVudG8-PGpzb24- >>>> >>>> eyJwb3N0YWxDb2RlIjoiNTYxNEFFIiwiaG91c2VOdW1iZXIiOiIxNTIifTwv >>>> anNvbj48L21lbWVudG8-?6-1.IBehaviorListener.1-theme- >>>> actionPromptModalWindow-content-parameters-inputForm-okButton HTTP/1.1" >>>> 200 91 http-bio-8081-exec-6 169 >>>> >>>> (web service called two times during this request) >>>> >>>> 0:0:0:0:0:0:0:1 - - [01/Apr/2015:12:06:19 +0200] "GET >>>> /portal/wicket/wicket/page?7 HTTP/1.1" 200 167629 http-bio-8081-exec-6 >>>> 2582 >>>> >>>> (web service called once during this request) >>>> >>>> If it is, then one option might be to defer the fetching of the data >>>>> until >>>>> as late as possible, ie when it needs to be constructed. >>>>> >>>>> I tried this but the method that exposes the data to the gui will >>>> always >>>> call the method that fetches the data when constructing the view model. >>>> So >>>> no matter how late the data will be fetched, it will always be fetched. >>>> >>>> Another option might be to have the view model use the HttpSession (via >>>>> isis-module-servletapi addon) to keep track of state. >>>>> >>>>> I'm still using Isis 1.7.0 and Eclipse complains about the module >>>> missing >>>> some dependency. It does work however and I can prevent the web service >>>> from being called by checking for a request method of GET during the >>>> POST-request but there are still 3 calls left. >>>> >>>> I didn't use the session object yet. Will try that. >>>> >>>> >>>> HTH >>>>> Dan >>>>> >>>>> >>>>> >>>>> The web service is fetching data, triggered by an action in the view >>>>> >>>>>> model, for the same view model. Do I always have to return a new view >>>>>> model >>>>>> with the fetched data in it or can I use the data from the fetch >>>>>> method >>>>>> and >>>>>> return the same view model? >>>>>> >>>>>> Thanks, >>>>>> Erik >>>>>> >>>>>> >>>>>> >> >
