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/