Hi, Dan, 

Thank you for your suggestions. Im using the @ViewModel annotation on
the ViewModel. The DTO I´m trying to use as a filter is annotated with
@DomainObject(nature=Nature.VIEW_MODEL) and javax.xml annotations. 

After doing some more tests, I think the problem is not in the model´s
state, since the viewer shows the correct value for the properties. Now
I suspect my problem has to do with the point of the lifecycle where
methods are called. 

I´ve included a link to a SimpleObjects app where I added a simplified
case of my ViewModel (SimpleViewModel.java). It is intended to be a
single entry point for an entity, so it has an action that returns a
collection with all entities, a "create" action that allows the user to
create a new SimpleObject and a "filter" action that asks the user for a
"name" and stores it in thje model´s DTO. 

The problem is that when I try to access the DTO´s fields in the list
action, it shows all attributes as null while the Viewer does show me
the value I entered. 

I think maybe the getObjects method is being called before the model´s
state has been recreated? 

--------------------------------------------- 

    private SimpleObjectDTO filter; 

     public SimpleViewModel filter(
            final @ParameterLayout(named = "Name")
@Parameter(optionality = Optionality.OPTIONAL) String name) {

        filter = new SimpleObjectDTO();

        filter.setName(name);

        filter.setDoFilter(true);

        return this;
    } 

    public List<SimpleObject> getObjects() {
        System.out.println("filter : " + filter);

        return simpleObjects.listAll();

    } 

    filter : SimpleDTO [name=null, doFilter=false]
    19:23:29,147  [Native               qtp1615535645-20 DEBUG]  SELECT
'domainapp.dom.simple.SimpleObject' AS          
"NUCLEUS_TYPE","A0"."name","A0"."notes","A0"."id","A0"."version" FROM
"simple"."SimpleObject" "A0" 

---------------------------------------------- 

https://www.dropbox.com/s/xiot10oskfpn5vm/SimpleViewModel.zip?dl=0 

El 2016-11-26 13:00, Dan Haywood escribió:

> Hi Hector, 
> 
> There are a couple of different ways to write view models, and they have 
> different capabilities.  At some point I anticipate we'll deprecate some/most 
> of these... we are where we are. 
> 
> What's common about all the view models is that the view model's state is 
> converted into the object's OID: this is visible in the URL of the object 
> (either in Wicket viewer or REST API).  When the view model is next 
> interacted with, then the framework recreates the view model from that OID, 
> then invokes the action/property edit. 
> 
> Which state is extracted into the OID/used to rehydrate the view model 
> subsequenty varies by implementation: 
> 
> - if your code implements ViewModel interface, then you have full control 
> (the viewModelInit and viewModelMemento methods are basically reciprocals of 
> each other) 
> 
> - if your code is annotated with @ViewModel or with 
> @DomainObject(nature=VIEW_MODEL | EXTERNAL_ENTITY | INMEMORY_ENTITY), then 
> the framework will use the state of any properties of the domain object; 
> however collections are ignored 
> 
> - if your code is annotated with @XmlRootElement, then we use JAXB to 
> serialize the entire object graph; in practice this means both properties and 
> collections, ignoring fields annotated with @XmlTransient.  Any references to 
> entities are converted to bookmarks, assuming that those entities are 
> themselves annotated with @XmlJavaTypeAdapter(PersistentEntityAdapter.class) 
> 
> Hopefully that's enough for you to figure out what's going on.  But if not, 
> perhaps you could post some code or, even better, create a simple example app 
> that demonstrates the issue. 
> 
> Cheers 
> Dan

-- 
Hector Fabio Meza

R&D LEAD SMARTOOLS 
(57) 300 2254455 [1] 
Skype: hectorf.meza 
www.smartools.com.co [2] 

 

Links:
------
[1] tel:%2857%29%20300%206815404
[2] http://www.smartools.com.co/

Reply via email to