-
1. Re: Refresh problem
tmalatinszki Jan 12, 2010 6:02 PM (in response to mekonom.meko16.hotmail.com)You can refresh Your datatable using reRender option of Your delete button, but It will show the original list, so You need to:
- delete the user
- refresh the list
- refresh the datatable with the reRender function
Regards,
Tamas
-
2. Re: Refresh problem
mekonom.meko16.hotmail.com Jan 12, 2010 6:33 PM (in response to mekonom.meko16.hotmail.com)I must use this reRender on xhtml page? and how can I refresh list? recaling it?
-
3. Re: Refresh problem
lvdberg Jan 13, 2010 12:58 PM (in response to mekonom.meko16.hotmail.com)Hi,
Seam has some nice feautures to automate the process substantially, so you don't need to worry too much..
You have the status of the DB and the status of your screen to consider. I assume you have solved the problem of deleting the user. The other part is where you need to reload the list and reRender. The easiets way is to use an Ajax-enabled submit, by means of a ajax-supprt tag INSIDE your standard sumbit button, or a Ajax-button. Look at the Rich-faces (I assume you are using that..) documentation how to do that.
The following is a piece of JSF where the button which fires an action an closes a popup window after finishing the action :
<a4j:commandButton value="SAVE" action="#{userManagementAction.finish}" eventsQueue="inputQueue" onclick="#{rich:component('userManagementModalPanel')}.hide();" />
You can also do the reRender stuff incombination with an action. Clicking the link selects a specific user (see the use of parametrized EL!!) and reRender a part of the view.
<a4j:commandLink value="#{_user.fullName}" action="#{userManagementAction.selectUser(_user)}" eventsQueue="inputQueue" reRender="userDetails, userText"/>
After making changes in the Database you need to read the user list from the database.I use an APPLICATION-SCOPED component which caches the users for the whole application. Please be aware that different sessions can access this component, so make accessing the userList a synchronized method..... @Unwrap public synchronized List<User> getUsers(){ return users; } .... @Observer(value={"whatever.userUpdateEvent"}) @RaiseEvent("a.refreshe.event") @SuppressWarnings("unchecked") @Transactional public synchronized void readUsers(){ users = entityManager.createQuery(queryString).getResultList(); log.info("Caching " + users.size() + " Users "); events.raiseAsynchronousEvent(); } ....
I use events to trigger the reading of the database and informing other components of this refresh (hence the observer and raiseevent annotations). The unwarap annotation is a nice Seam-trick to return whatever object from referencing its surrounding component. So if you give the component the name
whatever
; a reference to it in another bean will be:protected List<User> whatever;
So basically:
- Write a
caching user list seam bean
- Write the edit bean and add events leading to refreshing the previous bean after doing something,
- Add a ajax button to your screen
- Use the bean UNWRAP name for your datatable
- ReRender the table after you do something
be aware that things are synchronized no, so it will have an impact on you performance if you have a high number of users accessing this code you should try another concept.
Hopefully this helps.
Leo
- Write a