by the way - the new MyFaces examples show something like that in practice (just the UIData approach, not the one with actually adding components; I would say that more often the UIData approach will be used):
goto: http://www.irian.at/myfaces/ examples>components>master/detail example click on edit all countries; now you can click on "Add New Country" to add a new value to the list - or delete one... regards, Martin On Tue, 4 Jan 2005 13:54:14 -0800, Craig McClanahan <[EMAIL PROTECTED]> wrote: > On Tue, 4 Jan 2005 14:56:10 -0500, Sean Schofield > <[EMAIL PROTECTED]> wrote: > > I was wondering how if its possible with JSF to add a component to the > > tree via as the result of a POST. > > Yes, you can make arbitrary changes to the components in the tree in > the event handler to a POST. However, if you are using JSP they will > only show up if the added components are inside a component whose > rendersChildren property is set to true (so that the parent component > takes responsibility for actually doing the rendering. > > > > > A simple example: you have a list of phone numbers and you have a > > wizard on the page that allows them to add another one. How would > > Faces handle something like this? In the typical examples, the user > > is editing a form with exisitng elements that are known at design > > time. I guess I'd be most interested in adding to an existing list as > > that would be the only case where I wouldn't know all of the data > > ahead of time. > > There's a couple of different approaches that could be used. > > If your list is inside a UIData component (such as <h:dataTable>), > simply add the new object to the list that is bound to the "value" > property. Assuming you haven't set the "rows" property to limit how > many rows are rendered, the next rendering of the component will pick > them all up. You don't need to mess with the component tree at all, > because UIData iterates over all its column children, once per row, > for you. > > if you are constructing your presentation out of individual > components, then you'd just add them as children of the appropriate > parent, set their values, and then ensure that you're going to render > the same page again. > > > > > My guess is that something is possible but that it wouldn't be the > > easiest thing to accomplish. Even if you are able to create a new > > component and add it to the tree, it seems there would be an issue > > with binding that data to the model. > > The binding is actually pretty easy -- just create a new ValueBinding > instance (via Application.createValueBinding()) and then update the > component with something like: > > component.setValueBinding("value", vb); > > > > > I'm not an expert on faces (yet) but I wanted to get started thinking > > about this issue. Does anyone have any ideas on how I could approach > > this? Maybe I would need to extend UIData or something? > > > > sean > > > > Craig >

