[
https://issues.apache.org/jira/browse/WW-5126?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17332979#comment-17332979
]
Patrice DUROUX commented on WW-5126:
------------------------------------
Hi,
My case may be summarize like the following:
{code:java}
public class EntityAction<T> extends ActionSupport implements ModelDriven<T> {
private static final long serialVersionUID = 7393395802128656232L;
private T model;
@Override
public T getModel() {
return model;
}
@Inject("DAO")
private DAO dao;
@Override
public String execute() throws Exception {
model = dao.merge(model);
return super.execute();
}
public EntityAction(Class<T> c) {
try {
this.model = c.getConstructor(new Class[] {}).newInstance();
} catch (Exception e) {
}
}
}
{code}
You can also think about having the ID part of the model (entity) feed by the
query and have back the full model using dao.find() result.
I hope it helps.
Thanks!
> inconsistancy between Model Driven and Model Driven Interceptor documentations
> ------------------------------------------------------------------------------
>
> Key: WW-5126
> URL: https://issues.apache.org/jira/browse/WW-5126
> Project: Struts 2
> Issue Type: Improvement
> Reporter: Patrice DUROUX
> Assignee: Yasser Zamani
> Priority: Minor
> Fix For: 2.5.27, 2.6
>
> Time Spent: 1h
> Remaining Estimate: 0h
>
> Hi,
>
> The Model Driven documentation says:
> If an action class implements the interface
> {{com.opensymphony.xwork2.ModelDriven}} then it needs to return an object
> from the {{getModel()}} method. Struts will then populate the fields of this
> object with the request parameters, and *this object will be placed on top of
> the stack once the action is executed*. Validation will also be performed on
> this model object, instead of the action. Please read about
> [VisitorFieldValidator
> Annotation|https://github.com/apache/struts-site/blob/master/source/core-developers/visitor-field-validator-annotation.html]
> which can help you validate model's fields.
> where as the Model Driven Interceptor documentation says:
> h2. Parameters
> * {{refreshModelBeforeResult}} - *set to true if you want the model to be
> refreshed on the value stack after action execution and before result
> execution*. The setting is useful if you want to change the model instance
> during the action execution phase, like when loading it from the data layer.
> This will result in {{getModel()}} being called at least twice.
>
> Looking into the code shows that the default parameter value is false.
> Moreover the interceptor refresh process is based on call to the {{equals}}
> method and this method may have been redefined, in a JPA context for
> instance. The replacement is then not systematic and may not be done.
>
--
This message was sent by Atlassian Jira
(v8.3.4#803005)