Hi! Here is what I am trying to do: 1. I need a page that loads its dataTable contents from db fresh every time I access the page. 2. The items in the dataTable need to be clickable and bookmarkable in the future; this is why s:link was chosen. According to my experience, @Scope(PAGE) does not cut it with <s:link> elements, as the parameters are passed on as null. 3. My business items allow clicking a link, but instead of directly linking the user to the external url I want to record the click-count first. So intuitively I thought I could just return the url from the click-counting action.
The solutions I have tried are the following: 1. Page scope seems to have the right idea: the dataTable contents are refreshed from db each time the page is refreshed. However, page context seem to have problems with requirement 2 -- or am I doing something else wrong? 2. If I use Session scope, the <s:link> works fine and passes the actual objects as parameters to the desired method recordLinkClickAndRedirect(). However, with Session scope the dataTable does not get fresh data in a new page-refresh, because the session is still alive. I can actually make this happen by binding the @Destroy and @Remove annotations to my recordLinkClickAndRedirect() method, but it seams like a hack and I would rather not do that if there is a better way. 3. I have not found a way to redirect from within my recordLinkClickAndRedirect() method, but intuitively it seems like there should be a way as this is how navigation can normally be affected. Here are my code snipplets: ::: from items.xhtml <!-- content --> <ui:define name="content"> <h1>Latest business items</h1> <h:outputText value="No items found on this round. Please refresh page to check again!" rendered="#{businessItems == null or businessItems.rowCount==0}" /> <h:dataTable var="businessItem" value="#{businessItems}" rendered="#{businessItems.rowCount>0}"> <h:column> #{businessItem.description} <s:link value="#{businessItem.externalLinkURL}" action="#{itemViewer.recordLinkClickAndRedirect(businessItem)}" /> </h:column> </h:dataTable> </ui:define> ::: from ItemViewer.java @Stateless @Scope(ScopeType.PAGE) @Name("itemViewer") public class ItemViewer implements LocalInterface { @PersistenceContext private EntityManager entityManager; @DataModel @SuppressWarnings("unused") private List businessItems; /** * This method TODO * */ @Factory("businessItems") @SuppressWarnings("unchecked") public void getFreshBusinessItems() { businessItems = (List) entityManager .createQuery("select b from businessItem b"); } /** * This method records that the link has been clicked and redirects the * browser to the specific link. * * @param businessItem * @return */ public String recordLinkClickAndRedirect(BusinessItem businessItem) { businessItem.incrementClicks(); return businessItem.getExternalLinkURL(); } /** * This method is required by some scopes, e.g., Session scope. */ // @Destroy // @Remove public void destroyAndRemove() { // n.a. } } View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4060241#4060241 Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4060241 _______________________________________________ jboss-user mailing list jboss-user@lists.jboss.org https://lists.jboss.org/mailman/listinfo/jboss-user