Please put your table inside a panelGroupLayout and add partial triggers to that. I am doing same thing in my application and never faced problem stated by you. As per reason of your problem is concerned i am not able to comment on that as i have never tried that.
Cheers, Abhishek On 10/11/07, venkata guddanti <[EMAIL PROTECTED]> wrote: > > I suspect that this may be due to the fact that when the last row is > deleted, the partial trigger may not longer valid during the rendering > phase. One workaround is that you programatically call addPartialTarget with > the table in the actionListener for the delete button. > > Regards, > Venkata > > On 10/11/07, Joe Rossi <[EMAIL PROTECTED]> wrote: > > > > Any pointers on this one from the Trinidad experts? This is about to > > really start hitting my project deliverables :-( > > > > My gut feel is that it Trinidad is comparing old state to new state to > > work out whether or not to send a PPR update to the table and it's somehow > > failing if the last row is removed? If one of the Trinidad gurus points me > > in the right direction of the code I will debug into it. > > > > btw - it appears that the same problem occurs with removing the last row > > of a branch in a tree table. > > > > > > > > ------------------------------ > > From: [EMAIL PROTECTED] > > To: [email protected] > > Subject: Problem auto-refreshing tables > > Date: Tue, 2 Oct 2007 18:39:34 +0000 > > > > I'm hitting a problem with auto-refreshing of tables using Trinidad > > 1.2.1, facelets and JSF 1.2 (Sun RI). I've condensed the scenario down > > to a small test case shown below. The summary is: > > > > - I have a page which displays a table containing a collection of > > objects > > - Each row of the table contains two command links - one to edit the row > > and another to delete the row > > - Both links pop-up a dialog with details of the row. Hitting the "save" > > button on the dialog will either save the edit changes (if invoked from the > > edit link) or delete the row (if invoked from the delete link). > > - The table has a partialTriggers attribute which attempts to refresh > > the table contents whenever a row is edited or deleted (i.e. > > partialTriggers contains the ids of the edit and delete links) > > - Everything appears to work fine apart from deletion of the last row in > > the table whereby the table does not automatically refresh. > > > > Is this a bug or am I doing something silly? Is there a better way to > > achieve what I'm trying to do? > > > > thanks in advance for any help. > > > > Here's the source code: > > > > widgetList.xhtml (page containing the table): > > ============================= > > <!DOCTYPE html > > PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" > > " http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> > > <tr:document id="testForm" title="test form" > > xmlns:h=" http://java.sun.com/jsf/html" > > xmlns:f=" http://java.sun.com/jsf/core" > > xmlns:ui=" http://java.sun.com/jsf/facelets" > > xmlns:tr=" http://myfaces.apache.org/trinidad"> > > <tr:panelBorderLayout> > > <tr:form id="widgetListForm"> > > <tr:panelGroupLayout layout="vertical"> > > <tr:commandButton text="Create New Widget" > > action="dialog:widgetDialog" > > useWindow="true" partialSubmit="true" > > windowHeight="300" windowWidth="400" > > id="createWidgetCommand"> > > <tr:setActionListener from="#{widgetListBean.newWidgetBean}" > > to="#{pageFlowScope.widgetBean}" /> > > <tr:setActionListener from="#{'create'}" > > to="#{pageFlowScope.widgetBean.operation }" /> > > </tr:commandButton> > > > > <tr:commandButton text="Refresh Page" id="refreshCommand"> > > </tr:commandButton> > > > > <tr:table id="widgetTable" var="widgetBean" > > value="#{widgetListBean.widgetList }" rowBandingInterval="1" > > partialTriggers="refreshCommand createWidgetCommand > > widgetTable:editWidgetCommand widgetTable:deleteWidgetCommand"> > > <tr:column> > > <f:facet name="header"> > > <tr:outputText value="Widget Name" /> > > </f:facet> > > <tr:outputText value="#{widgetBean.name}" /> > > </tr:column> > > <tr:column> > > <f:facet name="header"> > > <tr:outputText value="Actions" /> > > </f:facet> > > <tr:panelGroupLayout layout="horizontal"> > > <tr:commandLink action="dialog:widgetDialog" > > useWindow="true" partialSubmit="true" > > windowHeight="300" windowWidth="400" > > id="editWidgetCommand" > > shortDesc="Edit the widget."> > > <tr:image source="/skins/tn/images/ico_edit.gif" /> > > <tr:setActionListener from="#{'edit'}" > > to="#{widgetBean.operation}" /> > > <tr:setActionListener from="#{widgetBean}" > > to="#{pageFlowScope.widgetBean}" /> > > </tr:commandLink> > > <tr:commandLink action="dialog:widgetDialog" > > useWindow="true" partialSubmit="true" > > windowHeight="300" windowWidth="400" > > id="deleteWidgetCommand" > > shortDesc="Delete the widget."> > > <tr:image source="/skins/tn/images/ico_delete.gif" /> > > <tr:setActionListener from="#{'delete'}" > > to="#{widgetBean.operation}" /> > > <tr:setActionListener from="#{widgetBean}" > > to="#{pageFlowScope.widgetBean}" /> > > </tr:commandLink> > > </tr:panelGroupLayout> > > </tr:column> > > </tr:table> > > > > </tr:panelGroupLayout> > > </tr:form> > > > > </tr:panelBorderLayout> > > </tr:document> > > > > > > widgetDialog.xhtml (the dialog that gets popped up when edit or delete > > is clicked): > > ========================================================== > > <!DOCTYPE html > > PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" > > " http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> > > <tr:document id="testDialog" title="Dialog" > > xmlns:h=" http://java.sun.com/jsf/html" > > xmlns:f=" http://java.sun.com/jsf/core" > > xmlns:ui=" http://java.sun.com/jsf/facelets" > > xmlns:tr=" http://myfaces.apache.org/trinidad"> > > <tr:form id="widgetDialogForm"> > > > > <tr:panelFormLayout id="widgetDialogForm" inlineStyle="width:20%"> > > <tr:inputText label="Widget Code" > > value="#{pageFlowScope.widgetBean.name }" > > id="nameField" required="true" showRequired="true" > > requiredMessageDetail="Widget name must be entered." > > maximumLength="10"/> > > > > <f:facet name="footer"> > > <tr:panelButtonBar> > > <tr:commandButton id="saveCommand" > > text="#{pageFlowScope.widgetBean.operation}" > > action="#{pageFlowScope.widgetBean.commitAction }" /> > > <tr:commandButton id="cancelCommand" text="Cancel" > > action="#{pageFlowScope.widgetBean.cancelAction}" > > immediate="true" /> > > </tr:panelButtonBar> > > </f:facet> > > </tr:panelFormLayout> > > </tr:form> > > </tr:document> > > > > > > WidgetList.java (backing bean for the main page - manages the collection > > of widgets) > > ========================================================== > > public class WidgetList > > { > > > > > > public WidgetList() > > { > > _createInitialTestValues(); > > } > > > > public List<Widget> getWidgetList() > > { > > return _widgetBeans; > > } > > > > public Widget getNewWidgetBean() > > { > > Widget widget = new Widget(this, ""); > > widget.setOperation("create"); > > return widget; > > } > > > > private void _createInitialTestValues() > > { > > _widgetBeans.add(new Widget(this, "w1")); > > _widgetBeans.add(new Widget(this, "w2")); > > _widgetBeans.add(new Widget(this, "w3")); > > } > > > > private List<Widget> _widgetBeans = new ArrayList<Widget>(); > > } > > > > > > Widget.java (backing bean for the individual rows) > > ================================= > > > > > > /** > > * Widget is a test bean > > */ > > public class Widget > > { > > public Widget(WidgetList widgetList, String name) > > { > > _widgetList = widgetList; > > _name = name; > > } > > > > public String getName() > > { > > return _name; > > } > > public void setName(String name) > > { > > _name = name; > > } > > public String getOperation() > > { > > return _operation; > > } > > public void setOperation(String operation) > > { > > assert(operation.equals("edit") || operation.equals("create") || > > operation.equals("delete")); > > _operation = operation; > > } > > > > public String commitAction() > > { > > if (_operation.equals("create")) > > { > > _widgetList.getWidgetList().add(this); > > } > > if (_operation.equals("delete")) > > { > > _widgetList.getWidgetList().remove(this); > > } > > if (_operation.equals("edit")) > > { > > // no change to owning collection > > } > > TrinidadFacesUtils.endDialog(_widgetList); > > > > return null; > > } > > > > public String cancelAction() > > { > > TrinidadFacesUtils.endDialog(this); > > > > return null; > > } > > > > @Override > > public boolean equals(Object obj) > > { > > if (obj instanceof Widget) > > { > > Widget w = (Widget) obj; > > return _name.equals(w._name); > > } > > return false; > > } > > > > @Override > > public int hashCode() > > { > > return _name.hashCode(); > > } > > > > @Override > > public String toString() > > { > > return _name; > > } > > > > private String _name; > > private String _operation = "edit"; > > private WidgetList _widgetList; > > } > > > > > > > > ------------------------------ > > Do you know a place like the back of your hand? Share local knowledge > > with BackOfMyHand.com <http://www.backofmyhand.com> > > > > > > ------------------------------ > > Do you know a place like the back of your hand? Share local knowledge > > with BackOfMyHand.com <http://www.backofmyhand.com> > > > >

