wow, after looking at all the proposed solutions i wound up coming
back to what i was doing before. Which is exactly what Srikanth
recommended. Is there a reason why the rest of you chose such obscure
routes to the getRowData?
Also it seems that no matter what i do the UIData property that my
dataTable is bound too on my backing bean get's called twice. Once
before the action is called and once after the action method is
called. When i select an item with the commandLink I am only
interested in the id of that element. It seems that i HAVE to load the
whole list back in just to get the id from the selected index of the
list. I prefer not to keep lists in my session scope and so my managed
bean is request scope and i load lists only as i need them. But, the
auto loading that is performed by JSF does not make this easy. Is
there a way around this?
I currently have an init boolean for my UIData so that the list will
only load once from my service layer. I would prefer that the List not
have to be loaded when i select the commandLink. Like i said i'm only
interested in the id. Also, the odd thing about grabbing the selected
object using the getRowData (which looks up the index) is that the
list i grab from my service layer may have been updated. So, then the
index would return the wrong object. Does everyone simply load up all
their lists into their managedbeans and store them in session scope?
It doesn't seem that developing something as simple as this should be
so difficult.
Following is my code.
...
private CatalogService catalogService = null;
private Category category = new Category();
private UIData categoryTable = new UIData();
private boolean categoryTableInit = false;
/**
* no arg contructor
*/
public CategoryAdminPresentation() {
this.catalogService =
(CatalogService)ServiceFactory.getInstance().getService(CatalogService.class);
}
public String child() {
Category category = (Category)categoryTable.getRowData();
// create parent category template
Category parentCategory = new Category();
parentCategory.setParentCategoryId(category.getCategoryId());
categoryTable.setValue(catalogService.getChildCategories(parentCategory));
return "child";
}
/**
* @return Returns the categoryTable.
*/
public UIData getCategoryTable() {
return initCategoryTable(categoryTable);
}
/**
* @param categoryTable The categoryTable to set.
*/
public void setCategoryTable(UIData categoryTable) {
this.categoryTable = initCategoryTable(categoryTable);
}
private UIData initCategoryTable(UIData categoryTable) {
if(categoryTableInit==false) {
categoryTable.setValue(catalogService.getChildCategories(category));
categoryTableInit = true;
}
return categoryTable;
}
/**
* @return Returns the category.
*/
public Category getCategory() {
return category;
}
/**
* @param category The category to set.
*/
public void setCategory(Category category) {
this.category = category;
}
...
Thanks,
Brandon
On 4/13/05, Brandon Goodin <[EMAIL PROTECTED]> wrote:
> This rowData works okay, if you are using session... but there are
> problems with this. Most of the time you want to query based on the ID
> of your object. Not the index of the object location. If you database
> changes behind the scenes and you query a list from the database, the
> index may produce a different object. The important thing to me is to
> get the ID for the query. I don't like to keep lists of objects in
> session. That's weighty and pointless. I appreciate the previous
> contributions. I'm going to try them out later this evening.
>
> Please correct me if i'm wrong.
>
> Thanks,
> Brandon
>
> On 4/13/05, Srikanth Madarapu <[EMAIL PROTECTED]> wrote:
> > In your backing bean, you must have access to the model (of your table ),
> > just call yourModel.getRowData() to get the current row's data or
> > yourModel.getRowIndex to the currenty row's index.
> >
> > -----Original Message-----
> > From: Ray Clark [mailto:[EMAIL PROTECTED]
> > Sent: Wednesday, April 06, 2005 10:46 PM
> > To: [email protected]
> > Subject: dataTable and commandButton question
> >
> > I'm sure this must have been asked before but I can't
> > find it in the archives. So please forgive me if it
> > has been asked before.
> >
> > I have a dataTable with a commandButton rendered on
> > each row. When the commandButton is pressed I need
> > it's managed bean method to know which row the button
> > was pressed for. So how can the method know which row
> > to process?
> >
> > Thanks,
> > Ray
> >
> > __________________________________
> > Do you Yahoo!?
> > Take Yahoo! Mail with you! Get it on your mobile phone.
> > http://mobile.yahoo.com/maildemo
> >
>