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
>
>

Reply via email to