Thanks for your response, it was something that I thougth, I have to
pass to the form the information that the user is paginating. But i
can't find documentation on how to pass attributes to the form when it's
for paginating and sorting, or if there are specials attributes which
indicates that's the user make a sort or go to next pagnined page.
Also how can I pass a such information only for paginating and sorting?
I mean how to add attributes to the form ? because I tried to make a
such thing : form="${namespace}AddAud?navigate=true" at the place of
form="${namespace}AddAud", but it doesn't pass the attribute correctly
and the form isn't more recognized...
Thanks
Julien
Paslaru Narcis a écrit :
> Hi,
>
> I don't know spring binding, but I think you should try and make a
> difference between the pagination (the submitting of the form when
> paginating and sorting) and the submiting using the other buttons
> (search, cancel) - maybe using a "DispatchAction".
> One method for search and another one when paginating (making the same
> seach, with the initial parameters).
> The form has to be submitted when pagination occurs so it can retrieve
> the checked checkboxes.
>
> Cheers,
> Narcis
>
> On Fri, Nov 13, 2009 at 10:55 AM, Julien Gribonvald
> <[email protected] <mailto:[email protected]>> wrote:
>
> 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
> > [email protected]
> <mailto:[email protected]>
> > 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
> [email protected]
> <mailto:[email protected]>
> 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
[email protected]
https://lists.sourceforge.net/lists/listinfo/displaytag-user