I usually use a hidden input with the value "paginating".
And for the other buttons (Search, Cancel, etc.) put a onclick javascript
function that changes the value of the hidden to "not Paginating".
Cheers,
Narcis
On Fri, Nov 13, 2009 at 11:47 AM, Julien Gribonvald <
julien.gribonv...@recia.fr> wrote:
> 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 <
>> julien.gribonv...@recia.fr <mailto:julien.gribonv...@recia.fr>> 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
>> > displaytag-user@lists.sourceforge.net
>> <mailto: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
>> <mailto: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