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

Reply via email to