hello rafa, i think you refer to this post: http://www.nabble.com/-Tinidad--Problems-with-tr%3Atable-selection-and-sorting-tf4777261.html
i already read your post - but i think there is an other problem in here... are there changes within the model before redisplaying the table? (do you really add or remove some entries? it didn't sound like that.) my issue: http://issues.apache.org/jira/browse/TRINIDAD-782 regards, gerhard 2007/11/13, Rafa Pérez <[EMAIL PROTECTED]>: > > Hi Gerhard, > > I posted a question a couple days ago about this issue but get no answer. > Could you tell me what is the number of the bug? > > Regards, > > - - Rafa > > On Nov 13, 2007 1:28 AM, Stephen Friedrich < [EMAIL PROTECTED]> wrote: > > > Fair enough. Thanks for staying with me. PPR on or off does not make > > any difference. > > > > Here's an extract of my JSF/facelets page: > > > > > > ----------------------------------------------------------------------------------------------------------------------- > > > > <tr:table id="shopTimeDetails" var="details" value="#{ > > shopTimeDetailsHome.shopTimeDetails}" binding="#{ > > shopTimeDetailsHome.table}"> > > <tr:column headerText="Delete"> > > <tr:commandLink id="deleteLink" action="#{ > > shopTimeDetailsHome.remove}" immediate="true" > > rendered="#{!details.isPlaceholder}"> > > <f:param name="detailsRowIndex" value="#{details.rowIndex > > }"/> > > <img src="images/delete.gif"/> > > </tr:commandLink> > > </tr:column> > > > > <tr:column headerText="Engine Type"> > > <tr:selectOneChoice id="engineType" value="#{details.engineType}" > > required="true" autoSubmit="true" immediate="true" > > valueChangeListener="#{shopTimeDetailsHome.handleEngineTypeChanged}"> > > <s:selectItems value="#{ engineTypesQuery.resultList}" > > var="engineType" label="#{engineType.name}"/> > > </tr:selectOneChoice> > > </tr:column> > > > > <tr:column headerText="3LC"> > > <tr:inputText id="threelc" value="#{details.threelc}" > > required="true" maximumLength="3" rendered="#{!details.isPlaceholder}"> > > <tr:validateLength maximum="3"/> > > </tr:inputText> > > </tr:column> > > > > > > ----------------------------------------------------------------------------------------------------------------------- > > > > > > And here's an extract of the bean that should handle removing/adding > > rows (property accesors excluded). > > The correct row gets removed from the model (from the "shopTimeDetails" > > list), but if row index 1 is > > deleted, then the new values from the old index 2 never make it to the > > page. > > I think that's more or less logical: The immediate delete command link > > causes a "short-circuit" of the > > remaining phases and the processing of the non-immediate components > > never takes place. > > But it sure must be possible somehow to access the stamped components > > and update them. > > Or maybe (hopefully) there's a cleaner/better way to implement this > > style of UI. > > > > Note my pitiful attempt to copy values manually (now commented out). > > > > > > ----------------------------------------------------------------------------------------------------------------------- > > > > public class ShopTimeDetailsHome { > > private List<ShopTimeDetails> shopTimeDetails; > > > > private transient CoreTable table; > > > > public void remove() { > > String indexText = FacesUtil.getRequestParameter("detailsRowIndex"); > > > > try { > > int rowIndex = Integer.parseInt(indexText); > > // handleRowRemove(rowIndex); > > shopTimeDetails.remove(rowIndex); > > updateTransientDetailsProperties(); > > } > > catch (NumberFormatException e) { > > errorLog.error("Expected row index to delete, but got: " + > > indexText, e); > > } > > } > > > > private void handleRowRemove(int i) { > > Object oldRowKey = table.getRowKey();// backup current model > > state > > > > try { > > int rowCount = table.getRowCount(); > > int columnCount = table.getChildCount(); > > for (int rowIndex = i; rowIndex < rowCount - 1; ++rowIndex) > > { > > for (int columnIndex = 0; columnIndex < columnCount; > > ++columnIndex) { > > copyCell(rowIndex + 1, columnIndex, rowIndex, > > columnIndex); > > } > > } > > } > > finally { > > table.setRowKey(oldRowKey);// restore model state > > } > > } > > > > private void copyCell(int fromRowIndex, int fromColumnIndex, int > > toRowIndex, int toColumnIndex) { > > table.setRowIndex(fromRowIndex); > > List fromColumns = table.getChildren(); > > UIComponent column = (UIComponent) fromColumns.get > > (fromColumnIndex); > > UIComponent fromCell = (UIComponent) column.getChildren > > ().get(0); > > if (fromCell instanceof EditableValueHolder) { > > EditableValueHolder holder = (EditableValueHolder) fromCell; > > Object value = holder.isLocalValueSet() ? > > holder.getLocalValue() : holder.getValue(); > > > > table.setRowIndex(toRowIndex); > > List toColumns = table.getChildren(); > > UIComponent toColumn = (UIComponent) > > toColumns.get(toColumnIndex); > > > > EditableValueHolder toCell = (EditableValueHolder) > > toColumn.getChildren().get(0); > > > > toCell.setValue(value); > > } > > } > > > > private void updateTransientDetailsProperties() { > > for (int i = 0; i < shopTimeDetails.size(); i++) { > > ShopTimeDetails details = shopTimeDetails.get(i); > > boolean isPlaceholder = i == shopTimeDetails.size() - 1; > > details.setIsPlaceholder(isPlaceholder); > > details.setRowIndex(i); > > } > > } > > > > > > > > Gerhard Petracek wrote: > > > hi, > > > > > > at the moment it is difficult to see what you already tried and which > > > painful way of trying different possibilities you already walked > > along... > > > > > > first of all - there is a bug at sortable and filterable tables - i > > > already opened an issue... > > > some details: this bug only occurs if you have a changing model within > > a > > > sortable table - i guess that's not your case!? > > > > > > 2 further questions: > > > - have you already tried to use component binding? > > > - did you already give ppr a chance or did you just deactivated it? - > > > generally ppr should work very well > > > > > > if nothing of both would solve your problem - i don't have further > > > spontaneous ideas without knowing more details about your > > implementation... > > > is it possible for you to provide some source code of your > > > implementation or an equivalent example? > > > > > > regards, > > > gerhard > > > > > > > > > > > > 2007/11/13, Stephen Friedrich < [EMAIL PROTECTED] > > > <mailto:[EMAIL PROTECTED]>>: > > > > > > Thanks for the answer. > > > I am not at all using PPR at the moment. Just to be sure that my > > > problem is not > > > caused in any way by PPR, I switched it off using this snippet at > > > the top of my page: > > > <script type="text/javascript" xml:space="preserve"> > > > // <![CDATA[ > > > _pprUnsupported = true; > > > // ]]> > > > </script> > > > > > > If I understand the problem correctly, the immediate flag causes > > all > > > other components > > > on the page to stay "unprocessed". > > > So the html component with the generated id > > > "shopTimeDetails:1:threelc" just keeps its > > > value, even though at row index 1 there now is a different model > > value. > > > > > > I just don't have any idea how to make this scenario work. > > > > > > > > > Gerhard Petracek wrote: > > > > hello, > > > > > > > > how do you trigger ppr (the update) at the moment? > > > > > > > > there are several ways to trigger ppr - to answer your question > > > > concerning programmatically updating components maybe the > > > following link > > > > will help you: > > > > > > > > > http://myfaces.apache.org/trinidad/devguide/ppr.html#Using%20RequestContext > > > > > > > > regards, > > > > gerhard > > > > > > > > > > > > > > > > 2007/11/12, Stephen Friedrich < [EMAIL PROTECTED] > > > <mailto:[EMAIL PROTECTED]> > > > > <mailto:[EMAIL PROTECTED] <mailto: [EMAIL PROTECTED]>>>: > > > > > > > > I am desperately trying to get a specific table UI to work > > - see > > > > screenshot. > > > > In short I have a list-backed table model. > > > > When displayed there's a delete button in front of row. > > > > The first column is a selectOneChoice. > > > > There's always one more row at the bottom than there are > > > "real" values. > > > > If the user selects a value from the dropdown, then another > > > row is > > > > added. > > > > > > > > Here's the catch: > > > > Of course, neither the delete link nor the dropdown should > > > trigger > > > > validation, > > > > so I have set immediate="true" on them. > > > > > > > > Unfortunately now the components on the page do not update > > > > correctly, for example > > > > if I delete the second row (see screenshot) the page does > > indeed > > > > display one row > > > > less, but the second row still displays the same data. > > > > > > > > What the heck can I do to programmatically update the > > > component-side > > > > of the model? > > > > > > > > > > > > > > > > > > > > -- > > > > > > > > http://www.irian.at > > > > > > > > Your JSF powerhouse - > > > > JSF Consulting, Development and > > > > Courses in English and German > > > > > > > > Professional Support for Apache MyFaces > > > > > > > > > > > > > > > -- > > > > > > http://www.irian.at > > > > > > Your JSF powerhouse - > > > JSF Consulting, Development and > > > Courses in English and German > > > > > > Professional Support for Apache MyFaces > > > > > -- http://www.irian.at Your JSF powerhouse - JSF Consulting, Development and Courses in English and German Professional Support for Apache MyFaces

