First of all I am pretty new to grails!
So here goes my question:
I have a list of approvers who should be grouped. Our UI basically looks as follows:

Whenever the user presses Create Group button a column of check boxes are added in the table as follows:


Now I have added these columns of checkboxes using JS as follows
function onAddGroupClicked(urlFromGsp){
var totalGroup = getTotalGroupCount();
addGroupInHeader(totalGroup);
addUserGroups(totalGroup)
}
function addGroupInHeader(totalGroup){
var groupId="group_"+totalGroup;
var groupCheckBox =$("<input type='checkbox' name='userGroupCheckBox'>");
groupCheckBox.attr("id",groupId);
var th=$("<th>");
th.css("width","100px");
th.append(groupCheckBox);
th.append("Group"+""+totalGroup);
$("#approver-group-table-header").append(th);
}
function addUserGroups(totalGroup){
$("#approver-group-table-body tr").each(function(){
var userId = $(this).attr("id");
var id = userId.split("_");
var checkBoxId="group_"+totalGroup+"_user_"+id[1];
var checkBox =$("<input type='checkbox' name='userGroupCheckBox'>");
checkBox.attr("id",checkBoxId);
checkBox.attr("value",checkBoxId);
var td = $("<td>");
td.append(checkBox)
$(this).append(td);
});
}
function getTotalGroupCount(){
var noOfGroupsCreated= $("#approver-group-table-header").find("input[type='checkbox']").length;
var totalGroup =parseInt(noOfGroupsCreated);
return totalGroup;
}
And my gsp page looks as follows
<g:form action="saveUserGroup">
<div id="scrollable-div" style="overflow:auto;max-width:1000px;min-width:500px; margin-top:-1px;">
<div id="inner-scrollable-div" style="max-width:10000px;">
<table id="approver-group-table" class="table table-bordered table-striped" style="margin-top:80px;">
<thead >
<tr id="approver-group-table-header">
<th><g:message code="approverGroup.corporateHouseUser.label" default="S.No"/></th>
<g:sortableColumn property="personName"
title="${message(code: 'approverGroup.groupId.label', default: 'Name')}"/>
<g:sortableColumn property="username"
title="${message(code: 'approverGroup.dateCreated.label', default: 'Login Id')}"/>
%{--<th>Rule : <g:select name="rule" from="${ApproverGroupRule.values()}"--}%
%{--noSelection="['': '- Select -']" autofocus="true"/></th>--}%
%{--<th><g:checkBox name="firstGroupSelectAll" id="group-a-select-all" onClick="onGroupASelectAll()"/> Group A</th>
<th><g:checkBox name="secondGroupSelectAll" id="group-b-select-all" onClick="onGroupBSelectAll()"/>Group B</th>--}%
</tr>
</thead>
<tbody id="approver-group-table-body">
<g:each in="${corporateHouseApproverList}" status="i" var="corporateHouseApprover">
<tr class="${(i % 2) == 0 ? 'even' : 'odd'}" id="user_${corporateHouseApprover.user.id}" >
<td>${i + 1}</td>
<td>${fieldValue(bean: corporateHouseApprover, field: "personName")}</td>
<td>${fieldValue(bean: corporateHouseApprover, field: "user.username")}</td>
%{--<g:if test="${corporateHouseApprover.groupId==-1}">
<td><g:checkBox class="group_1" name="group_1" value="${corporateHouseApprover.user.id}" id="user_${corporateHouseApprover.user.id}" ></g:checkBox></td>
<td><g:checkBox class="group_2" name="group_2" value="${corporateHouseApprover.user.id}" id="user_${corporateHouseApprover.user.id}"></g:checkBox></td>
</g:if>--}%
%{--<g:else>
<g:if test="${corporateHouseApprover.groupId==2}">
<td><g:checkBox class="group-a" name="groupA" value="${corporateHouseApprover.user.id}" checked="checked"></g:checkBox></td>
</g:if>
<g:if test="${corporateHouseApprover.groupId==3}">
<td><g:checkBox class="group-a" name="groupB" value="${corporateHouseApprover.user.id}" checked="checked"></g:checkBox></td>
</g:if>
</g:else>--}%
</tr>
</g:each>
</tbody>
</table>
</div>
</div>
<g:submitButton name="submit"/>
</g:form>
%{--<div id="scrollable-div" style="overflow:scroll;max-width:500px;">--}%
%{--<div id="inner-scrollable-div" style="max-width:10000px;">
</div>
</div>--}%
</div>
Now while saving groups to the database I parsing the parameter values in my grails controller as follows:
def saveUserGroup(){
String userGroups=params.userGroupCheckBox.toString()
userGroups=userGroups.replace("[","")
userGroups=userGroups.replace("]","")
String[] usersAndGroups=userGroups.split(",")
for(String userAndGroup : usersAndGroups){
String[] groups=userAndGroup.split("group_")
for(def group : groups){
String[] groupAndUser= group.split("_user_")
}
}
redirect(action: approverList)
}
}
I know this is definitely not an effective way to group the users as per my requirement as lots of parsing needs to be done in the controller and also I havenot taken advantage of databinding( I ma not sure if I can use databinding feature here) . So what are better approaches of doing what I am supposed to do? As in how do I bind the values of dynamically created checkboxes in my controller?
And another problem is
String[] groups=userAndGroup.split("group_") doesnot split my string even though my string contains "group_0_user_1" So how exactly am I suppose to split this string and other such strings after group_?