I know I'm making some obvious mistake below, and it's driving me to
distraction....
I have a page which displays a list and allows selection to go to a detailed
view of the selected item:
| @Stateful
| @Scope(SESSION)
| @Name("dataSourceList")
| @LoggedIn
| public class DataSourceListAction implements DataSourceList, Serializable
| {
| ...
|
| @DataModel
| private List<DataSource> dataSources;
| @DataModelSelection
| @In(required=false)
| @Out(scope=SESSION, required=false)
| private DataSource dataSource;
|
| @Factory
| @Observer("createDataSourceConfirmed")
| public void getDataSources()
| {
| dataSources = em.createQuery("from DataSource s where s.user.username
= :username")
| .setParameter("username", user.getUsername())
| .getResultList();
| }
|
| public String selectDataSource()
| {
| log.info("get datasource: #0 for #{user.username}",
dataSource.getId());
| dataSource = em.find(DataSource.class, dataSource.getId());
| log.info("got datasource: #0 for #{user.username}",
dataSource.getName());
| events.raiseEvent("selectDataSource");
| return "datasource";
| }
|
| public void delete()
| {
| dataSources.remove(dataSource);
| em.remove(dataSource);
| dataSource=null;
| }
|
| @Destroy @Remove
| public void destroy() {}
|
| }
|
I want the selection outjected to drive a detailed view page, which among other
things displays an attribute which is a list of objects using a @DataModel and
dataTable. The backing code looks like:
| @Stateful
| @Scope(SESSION)
| @Name("dataSourceView")
| @LoggedIn
| public class DataSourceViewAction implements DataSourceView, Serializable
| {
| ...
|
| @In(scope=SESSION, required=true)
| private DataSource dataSource;
|
| @DataModelSelection(value="dataFields")
| @Out(scope=SESSION, required=false)
| private DataField dataField;
|
| @DataModel(value="dataFields")
| @Observer("selectDataSource")
| public List<DataField> getDataFields()
| {
| log.info("in new getDataFields for #0", dataSource == null ? "null" :
dataSource.getName());
| return dataSource.getDataFields();
| }
|
| public String selectDataField()
| {
| log.info("get dataField: #0", dataField.getName());
| return "dataviewer";
| }
|
| @Destroy @Remove
| public void destroy() {}
|
| }
|
I'm confused over the behavior. I create two items in the list in other code.
When I select the first item in the list, it shows the simple attributes of the
first item, but the list attribute contains the values from the second, most
recently created item. Similarly if I subsequently select the second item from
the list, it shows the simple attributes from the second item, but the list
attrbute from the first. If I select the second item again, everything looks
fine. The debugging statements in the observer do show that the dataSource
object I expect to be selected is the previously outjected one.
I'm missing something clear and simple in the lifecycle here - anyone have any
advice?
View the original post :
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3975290#3975290
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3975290
_______________________________________________
jboss-user mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/jboss-user