spring binding with displaytable and multi checkbox

View: New views
6 Messages — Rating Filter:   Alert me  

spring binding with displaytable and multi checkbox

by Julien Gribonvald :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

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@...
https://lists.sourceforge.net/lists/listinfo/displaytag-user

Re: spring binding with displaytable and multi checkbox

by Julien Gribonvald :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

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@...
> 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@...
https://lists.sourceforge.net/lists/listinfo/displaytag-user

Re: spring binding with displaytable and multi checkbox

by Paslaru Narcis :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

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.gribonvald@...> 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@...
> 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@...
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@...
https://lists.sourceforge.net/lists/listinfo/displaytag-user

Re: spring binding with displaytable and multi checkbox

by Julien Gribonvald :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

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.gribonvald@... <mailto:julien.gribonvald@...>> 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@...
>     <mailto:displaytag-user@...>
>     > 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@...
>     <mailto:displaytag-user@...>
>     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@...
https://lists.sourceforge.net/lists/listinfo/displaytag-user

Re: spring binding with displaytable and multi checkbox

by Paslaru Narcis :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

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.gribonvald@...> 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.gribonvald@... <mailto:julien.gribonvald@...>> 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@...
   <mailto:displaytag-user@...>

   > 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@...
   <mailto: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@...
https://lists.sourceforge.net/lists/listinfo/displaytag-user

Re: spring binding with displaytable and multi checkbox

by Julien Gribonvald :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

So finaly I'm not wrong, my problem is due to a bug with the js fonction
: javascript:displaytagform

see here for the bug : http://jira.codehaus.org/browse/DISPL-601

Someone know a workaround ? or have solved this problem ?

Thanks


Paslaru Narcis a écrit :

> 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.gribonvald@... <mailto:julien.gribonvald@...>> 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.gribonvald@...
>         <mailto:julien.gribonvald@...>
>         <mailto:julien.gribonvald@...
>         <mailto:julien.gribonvald@...>>> 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@...
>         <mailto:displaytag-user@...>
>            <mailto:displaytag-user@...
>         <mailto:displaytag-user@...>>
>
>            > 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@...
>         <mailto:displaytag-user@...>
>            <mailto:displaytag-user@...
>         <mailto:displaytag-user@...>>
>
>            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@...
https://lists.sourceforge.net/lists/listinfo/displaytag-user