Hi, Nobody can help me ? I will try a better explaination ! (sorry for my english)
I'm facing to some problems with displaytag lib and with pagination and ordering options of datatable. My problem is that i have a search result where the user can select multi results on pagined and sorted pages if he wants, and the problem is when the user make a sort or go on an other page, he loose his selection. On the doc of displaytag and with the exemples it says that i need to set the form option in <display:table ... form="...."> to save the selection better sorts and pages. I'm trying to do that, but it doesn't work and it's submiting the form each time that the user make a sort or go to next pagnied page ( I have a validator which return an error about selected values, validator called after submit normaly)... when i remove the form i can navigate on all pagined pages and i can make all sorts, but with the form I stay on the first page and i can't make any sort. Also with the form option the buttons (next, previous, cancel...) doesn't works correctly It make some days that I'm trying to solve that but without success, any help would be appreciate. Else here is a part of my form : [CODE] <spring:nestedPath path="subForm"> <portlet:actionURL var="submitAudience"> <portlet:param name="action" value="addAudience" /> <portlet:param name="_page" value="${page}" /> </portlet:actionURL> <form name="${namespace}AddAud" method="post" action="${submitAudience }"> .... <spring:bind path="subKey"> <table border=0 cellpadding=5 width="90%"> <tr> <td><d:table name="${userList}" id="user" sort="list" requestURI="${submitAudience}" form="${namespace}AddAud" export="false" class="dataTable" defaultsort="2" defaultorder="ascending" cellspacing="1" pagesize="${nbItemsToShow}" decorator="org.displaytag.decorator.TotalTableDecorator"> <d:column title="Select"> <input type="checkbox" name="${status.expression}" value="${user.userId}" /> </d:column> <c:forEach items="${attrDisplay}" var="displayAttr"> <d:column titleKey="news.label.${displayAttr}" sortable="true" headerClass="sortable"> <c:forEach items="${user.attributes[displayAttr]}" var="attrValue"> <c:out value="${attrValue}" /> </c:forEach> </d:column> </c:forEach> <d:setProperty name="paging.banner.item_name" value="${tit}" /> <d:setProperty name="paging.banner.items_name" value="${tit}s" /> </d:table></td> </tr> <tr> <td><span class="portlet-msg-error">${status.errorMessage}</span></td> </tr> </table> </spring:bind>[/CODE] Subkey is a table of string a property of subForm. and here is my controller : [CODE] public class SubcribeController extends AbstractWizardFormController { ... public SubcribeController() { setCommandClass(SubForm.class); setCommandName(Constants.CMD_SUB_F); setAllowDirtyBack(true); setAllowDirtyForward(false); setSessionForm(true); setPageAttribute(Constants.ATT_PAGE); setPages(new String[] {Constants.ACT_ADD_AUDIENCE, Constants.ACT_ADD_AUDIENCE, Constants.ACT_ADD_AUDIENCE}); } public void afterPropertiesSet() throws Exception { ... } @Override protected void processFinish( ActionRequest request, ActionResponse response, Object command, BindException errors) throws Exception { SubForm cmd= (SubForm)command; this.subService.addSubscribers(cmd.getSubKey(), cmd.getSubscriber()); response.setRenderParameter(Constants.ATT_CTX_ID,String.valueOf(cmd.getSubscriber().getCtxId())); response.setRenderParameter(Constants.ACT, Constants.ACT_VIEW_AUDIENCE+cmd.getSubscriber().getCtxType()); } @Override protected void processCancel( ActionRequest request, ActionResponse response, Object command, BindException errors) throws Exception { SubForm cmd= (SubForm)command; response.setRenderParameter(Constants.ACT, Constants.ACT_VIEW_AUDIENCE+cmd.getSubscriber().getCtxType()); response.setRenderParameter(Constants.ATT_CTX_ID,String.valueOf(cmd.getSubscriber().getCtxId())); } @Override protected void validatePage( Object command, Errors errors, int page, boolean finish) { SubForm subF = (SubForm)command; SubValidator subValidator = (SubValidator) getValidator(); if (finish) { this.getValidator().validate(command, errors); return; } switch (page) { case 0: subValidator.validateSearch(subF, errors); break; case 1: subValidator.validateSubscriberKey(subF, errors); break; } } @Override protected Object formBackingObject(PortletRequest request) throws Exception { SubForm subForm = new SubForm(); String ctx = request.getParameter(Constants.ATT_CTX); subForm.getSubscriber().setCtxType(ctx); subForm.getSubscriber().setCtxId(PortletRequestUtils.getLongParameter(request, Constants.ATT_CTX_ID)); return subForm; } @Override protected Map referenceData(PortletRequest request, Object command, Errors errors, int page) throws Exception { boolean isGrp = ((SubForm) command).getSubscriber().getIsGroup() == 1 ? true : false; Long ctxId = ((SubForm) command).getSubscriber().getCtxId(); String ctx = ((SubForm) command).getSubscriber().getCtxType(); if (!this.um.isUserAdminInCtx(ctxId, ctx, request.getRemoteUser())) { log.warn("SubcribeController:: user " + request.getRemoteUser() + " has no role admin"); throw new PortletSecurityException("you are not authorized for this action"); } Map<String, Object> model = new HashMap<String, Object>(); if (ctx.equalsIgnoreCase(NewsConstants.CTX_C)) { model.put(Constants.CMD_CATEGORY, this.cm.getCategoryById(ctxId)); } else if (ctx.equalsIgnoreCase(NewsConstants.CTX_T)) { model.put(Constants.CMD_TOPIC, this.tm.getTopicById(ctxId)); Long cId = this.tm.getTopicById(ctxId).getCategoryId(); model.put(Constants.ATT_CNAME, this.cm.getCategoryById(cId).getName()); } model.put(Constants.ATT_PM, RolePerm.valueOf(this.um.getUserRoleInCtx(ctxId, ctx, request.getRemoteUser())).getMask()); if (page == 0) { model.put("subTypeList", SubscribeType.values()); } else if (page == 1) { model.put(Constants.CMD_SUB_F, (SubForm) command); if (isGrp) { groups = this.subService.searchGroups(((SubForm) command).getToken()); model.put("grps", groups); } else { users = this.um.findPersonsByToken(((SubForm) command).getToken()); model.put(Constants.ATT_USER_LIST, users); } model.put(Constants.ATT_LDAP_DISPLAY, um.getLdapUserService().getSearchDisplayedAttributes()); model.put(Constants.ATT_NB_ITEM_TO_SHOW, this.nbItemsToShow); model.put(Constants.ERRORS, errors); } else if (page == 2) { model.put(Constants.CMD_SUB_F, (SubForm) command); List<EscoUser> lu = null; if (((SubForm) command).getSubscriber().getIsGroup() == 0) { lu = new ArrayList<EscoUser>(); for (String id : ((SubForm) command).getSubKey()) { for (IEscoUser user : users) { if (user.getUserId().equalsIgnoreCase(id)) { lu.add((EscoUser) user); } } } } model.put(Constants.ATT_USER_LIST, lu); model.put(Constants.ATT_LDAP_DISPLAY, um.getLdapUserService().getSearchDisplayedAttributes()); } return model; } @Override protected ModelAndView renderInvalidSubmit(RenderRequest request, RenderResponse response) throws Exception { return null; } @Override protected void handleInvalidSubmit(ActionRequest request, ActionResponse response) throws Exception { log.warn("SubcribeController:: handleInvalidSubmit: goto home page"); response.setRenderParameter(Constants.ACT, Constants.VIEW_NEWSSTORE); } ... @Override protected boolean isFormSubmission(PortletRequest request) { for (Enumeration params = request.getParameterNames(); params.hasMoreElements();) { String paramName = (String) params.nextElement (); if (paramName.startsWith(PARAM_TARGET) || paramName.equals(PARAM_FINISH) || paramName.equals(PARAM_FINISH)) { return true; } } return super.isFormSubmission (request); } } [/CODE] Thanks for all the help you will be able to provide. Julien Gribonvald a écrit : > Hello, > > It makes several hours that after a problem with my multiselect checkbox > in a pagined table. > > My problem is that my checkbox which are selected in one page aren't > kept when i go on a next pagined page, someone have experienced a such > thing or have exemples on how to works with a such case ? > An other problem is that when i go back to the previous pagined page i > can't obtain my next selections. > > So here is my code : > > <spring:bind path="subKey"> > <d:table name="${userList}" > id="user" sort="list" requestURI="${submitAudience}" > export="false" > class="dataTable" defaultsort="2" defaultorder="ascending" > > pagesize="${nbItemsToShow}" > decorator="org.displaytag.decorator.TotalTableDecorator"> > > <d:column > title="Select"> > <input > type="checkbox" name="subKey" > > value="${user.userId}" /> > </d:column> > > <c:forEach > items="${attrDisplay}" var="displayAttr"> > <d:column > titleKey="news.label.${displayAttr}" sortable="true"> > <c:forEach > items="${user.attributes[displayAttr]}" > > var="attrValue"> > <c:out > value="${attrValue}" /> > </c:forEach> > </d:column> > </c:forEach> > > > <d:setProperty > name="paging.banner.item_name" > value="${tit}" /> > <d:setProperty > name="paging.banner.items_name" > value="${tit}s" /> > > </d:table> > </spring:bind> > subKey is a String[] parameter. > > When I submit my selection I have also the current page selection only. > > Thanks for those who can help me for this problem, i tryed many things > but without success. > > Thanks > > - Julien > > ------------------------------------------------------------------------------ > Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day > trial. Simplify your report design, integration and deployment - and focus on > what you do best, core application coding. Discover what's new with > Crystal Reports now. http://p.sf.net/sfu/bobj-july > _______________________________________________ > displaytag-user mailing list > displaytag-user@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/displaytag-user > > > ------------------------------------------------------------------------------ Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day trial. Simplify your report design, integration and deployment - and focus on what you do best, core application coding. Discover what's new with Crystal Reports now. http://p.sf.net/sfu/bobj-july _______________________________________________ displaytag-user mailing list displaytag-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/displaytag-user