Hey again ! Sorry for bothering everyone but I just wanted to say that I think I found my perfect solution. I was looking at the EntityApplicationStatePersistenceStrategy class and it just gave me my answer...
Maybe my new solution should replace the clumsy EntityPersistentFieldStrategy of tapestry-jpa project: public class BetterEntityPersistentFieldStrategy extends AbstractSessionPersistentFieldStrategy { private final static String PREFIX = "entity:"; private final EntityManagerManager entityManagerManager; public BetterEntityPersistentFieldStrategy(final EntityManagerManager entityManagerManager, final Request request) { super(PREFIX, request); this.entityManagerManager = entityManagerManager; } @Override protected Object convertApplicationValueToPersisted(final Object newValue) { try { return JpaInternalUtils.convertApplicationValueToPersisted(entityManagerManager, newValue); } catch (final RuntimeException ex) { return super.convertApplicationValueToPersisted(newValue); } } @Override protected Object convertPersistedToApplicationValue(final Object persistedValue) { if (persistedValue instanceof PersistedEntity) { final PersistedEntity persisted = (PersistedEntity) persistedValue; return persisted.restore(entityManagerManager); } else { return super.convertPersistedToApplicationValue(persistedValue); } } } Sorry again for spamming :) 2014-09-18 0:27 GMT+02:00 Charlouze <m...@charlouze.com>: > Hello everybody, > > I'm really not sure about what I did and I really appreciate a feedback > from people who knows how persistent fields works. > > If i'm not clear enough or anything about my issue, just let me know. > > Cheers, > Charles. > > 2014-09-16 17:13 GMT+02:00 Charlouze <m...@charlouze.com>: > >> As for now, I solved my problem using a new PersistentFieldStrategy and I >> want your opinion about it: >> >> public class MultiplePersistentFieldStrategy implements >> PersistentFieldStrategy { >> >> private final Logger logger; >> >> private final List<PersistentFieldStrategy> delegates; >> >> public MultiplePersistentFieldStrategy(final Logger logger, >> final List<PersistentFieldStrategy> delegates) { >> this.logger = logger; >> this.delegates = Lists.newArrayList(delegates); >> } >> >> @Override >> public void postChange(final String pageName, final String >> componentId, final String fieldName, >> final Object newValue) { >> for (final PersistentFieldStrategy persistentFieldStrategy : >> delegates) { >> try { >> persistentFieldStrategy.postChange(pageName, componentId, >> fieldName, newValue); >> return; >> } catch (final RuntimeException e) { >> logger.debug("Error while using a >> PersistentFieldStrategy", e); >> } >> } >> throw new IllegalArgumentException("Unable to find any suitable >> PersistentFieldStrategy"); >> } >> >> @Override >> public Collection<PersistentFieldChange> gatherFieldChanges(final >> String pageName) { >> final List<PersistentFieldChange> persistentFieldChanges = >> Lists.newArrayList(); >> for (final PersistentFieldStrategy persistentFieldStrategy : >> delegates) { >> >> persistentFieldChanges.addAll(persistentFieldStrategy.gatherFieldChanges(pageName)); >> } >> return persistentFieldChanges; >> } >> >> @Override >> public void discardChanges(final String pageName) { >> for (final PersistentFieldStrategy persistentFieldStrategy : >> delegates) { >> persistentFieldStrategy.discardChanges(pageName); >> } >> } >> } >> >> Thanks again, >> >> Charles. >> >> 2014-09-16 16:29 GMT+02:00 Charlouze <m...@charlouze.com>: >> >>> Hello Tapestry users & devs, >>> >>> I have a component which does lots of ajax requests. Parameters setted >>> at the first render are not available upon ajax requests so I decided to >>> persist them in specific properties. >>> One of those parameter is a database entity (I use tapestry-jpa) so I >>> decided to use the the "entity" strategy so that my entity is reload and >>> managed on every request. >>> My problem is that when I use my component on a non persisted (yet) >>> entity, it crashes as it is a transient entity that cannot be found. >>> >>> Do you think of a better way than creating my own persistence strategy ? >>> >>> Thx in advance :D >>> >> >> >