Mark, I assume you have looked at the simple examples and saw the sortable table examples there. None of them have checkboxes but they will help you to set up a simple sortable table (that's probably not your issue though.)
Most likely you are experiencing a known issue: http://issues.apache.org/jira/browse/MYFACES-228 We are currently working on a solution to it. It may be a couple of weeks until we get a patch. So far I have been one of the main people looking at the issue and I'm leaving the country next week for two weeks. sean On 6/1/05, Slawek <[EMAIL PROTECTED]> wrote: > ok, but plese by lenient;) > thats my old stuff (while w was jaunty php developer who was jus learning > OOP) that after somme copy-paste;) work started working im my jsf app. > > 1. JS code is procedural cause i hate that ridiculous quasi-object js oop > 2. somme idenifiers are named in polish language, bu i have commented them > in english > > so... > first we need somme global variables: > > > var collumnToSort=0; //number of collumnt that will be sorted. we will > need them cause that cant be passed to comparator (explained later) > var sortMode=1;// 1-means that we will sort strings, 2-means that we will > sort numbers (int or float) > var directions=new Array();// array o sort orders per each collumn (i > assume that there will be 11 collumns-change array dimenson to fit your > heeds) 1-means desc sort, -1 - means inc sort > > directions[0]=1;directions[1]=1;directions[2]=1;directions[3]=1;directions[4]=1;directions[5]=1; > directions[6]=1;directions[7]=1;directions[8]=1;directions[9]=1;directions[10]=1; > > there is posibilty that our table data could be links to details or sth or > could be surronded in span tag. > so to compare data from each cell of table we must get rid of <a> or > <span> tag, those 2 functions do it: > > function takeCareAboutSpan(elem){ > res=elem.match(/<span.*>(.*)<\/span>/i); > if (res==null)//nie znaleziono znacnzika span > return elem; //zwrocenie elementu > else > return res[1]; > } > > function takeCareAboutAHref(elem){ > res=elem.match(/<a.*>(.*)<\/a>/i); > if (res==null)//nie znaleziono znacnzika span > return elem; //zwrocenie elementu > else > return res[1]; > } > > u give them the innerHTML of table cell and they give u pure data, without > garbage;) > > > > in poland we use , insted of . to write float numbers so i have hunction > that change polish notation to "normal world" notation;) ...maybe can be > helpfull for someone > > function removeComas(s){ > return s.replace(',' , ''); > } > > > what we need are two comparing finctions, one to inc sort and secont to > desc sort. they takes 2 parameters to compare and return -1 when order is > wrong, 1 when is ok, 0 when paramters are the same (whatever same means in > js - i cant remeber;) > > //desc sort > function sortujMalejaco(a,b){ > slowo1=takeCareAboutAHref(takeCareAboutSpan(a[collumnToSort])); > slowo2=takeCareAboutAHref(takeCareAboutSpan(b[collumnToSort])); > > if (sortMode==2){//numbers sort mode > slowo1=parseFloat(removeComas(slowo1)); > slowo2=parseFloat(removeComas(slowo2)); > } > else{//string sort mode > slowo1=slowo1.toLowerCase(); > slowo2=slowo2.toLowerCase(); > } > > if (slowo1>slowo2){ > return -1; > } > else{ > if (slowo1<slowo2) > return 1; > else > return 0; > } > } > > //inc sort > function sortujRosnaco(a,b){ > slowo1=takeCareAboutAHref(takeCareAboutSpan(a[collumnToSort])); > slowo2=takeCareAboutAHref(takeCareAboutSpan(b[collumnToSort])); > > if (sortMode==2){//sortowanie liczb > slowo1=parseFloat(removeComas(slowo1)); > slowo2=parseFloat(removeComas(slowo2)); > } > else{ > slowo1=slowo1.toLowerCase(); > slowo2=slowo2.toLowerCase(); > } > > if (slowo1<slowo2){ > return -1; > } > else{ > if (slowo1>slowo2) > return 1; > else > return 0; > } > } > > and the most importand function... sorting monster. the idea is to copy > data from table (DOM stuff) to my own model (matrix), sort that model, and > than copy data from model to table. > a i remember sorting rows of table was impossible so i had to sort somme > separated variable. > > /* > idTable-id of table tag (remember about jsf colons;) > col-which columf of that table u want to sort > mode-1sort as strings, 2sort as numbers > lastRows-how many rows (counting from the end) have to be ommited > while > sorting (for example footer of the table) > btw: funtion omits first row from the begining (header) > */ > function sortTable(idTable, col, mode, lastRows){ > collumnToSort=col;//get global variables cause comparators must get > values from them-cant pass paramters to comparators cause they are called > as function references > sortMode=mode; > table=document.getElementById(idTable); > if (!table) > return false; > wiersze=table.rows;//all rows of table > dane = new Array();//my own data model (that will be matrix) > > for (i=1; i<wiersze.length-lastRows; i++){//copy data from table to model > omiting first (zero) row and few last rows > dane[i-1]=new Array(); > for (j=0; j<wiersze[i].cells.length; j++){ //copy each cell of row > dane[i-1][j]=wiersze[i].cells[j].innerHTML;//!!! notice that we are > copying innerHTML so everithing what is inside <td> will be copied (ex: > links, spans and so on) > } > } > > //==========sort========== > if(directions[col]==1) > dane.sort(sortujMalejaco); //pass reference to comparator function > else > dane.sort(sortujRosnaco); > > directions[col]*=(-1);//reverse direction of sorting > > > //copy data from model to table > for (i=1; i<wiersze.length-lastRows; i++){//przepsianie sortowanych > danych do htmla > for (j=0; j<wiersze[i].cells.length; j++){ > wiersze[i].cells[j].innerHTML=dane[i-1][j]; > } > } > return false;//to eventually stop submit event to propagate when clickin > on jsf component (ex command button) - page wont be sent on server > } > > > how to use that? > simply: > <h:column> > <f:facet name="header"> > <h:commandLink value="#{msg.TABLE_PRODUCT_NAME}" onclick="return > sortTable('f:data', 0, 1,1)" /> > </f:facet> > . > . > . > > > > so thats all > i may look like shit but works fine;) > > im using it to sort curenty dispalyed data > im also using server side sorter (order by in hibernate) to global sort > all data from database-but it doesnt matter > > notice that after reload page u loose your JS sorting! > actually i have my global JS variables saved in hidden fileds so i can > restore sorting by <body onload> > > cheers > slawek > > > > > The checkbox setters would get executed first because they have > > onchange="submit()" attribute. I've also noticed that the checkboxes do > > not > > stay checked when paging with a dataScroller, this may be related, though > > I'm not quite sure how, just feels like it. I'm thinking that the > > arrayList > > that backs the dataTable is not being saved before paging and/or > > sorting? I > > though this was inherit in the component? > > > > Any clarifications on any of this would be appreciated. > > > > Also, I would be interested in seeing your sort script. > > > > Thanks, > > -Mark > > > > >

