Skip to content

PagedTable Dymanic Row Insert #8

@rajuprabu

Description

@rajuprabu

I am using PagedTable control and i am facing problem in dynamically adding row in the Table. When I add row dynamically, it is not reflected in the table UI, I have to either change the Items per Row (int the UI) or click on the column header to see the inserted row in the PagedTable.

I am using PagedTable 0.6.3 and my application is deployed inside JBOSS AS 7.0.1 container.

Here is my code:

private void initUI()
{
final Action ACTION_ADD = new Action("Add");
final Action ACTION_EDIT = new Action("Edit");
final Action ACTION_CANCEL = new Action("Cancel");

final Action[] SELECT_MENU_ACTIONS = new Action[] { ACTION_ADD, ACTION_EDIT,ACTION_CANCEL};
final Action[] NULL_MENU_ACTIONS = new Action[] { ACTION_ADD, ACTION_CANCEL};

final PagedTable table = new PagedTable("");
table.setWidth("100%");
table.setSelectable(true);
table.setMultiSelect(false);
table.setImmediate(true); // react at once when something is selected

table.setContainerDataSource(getDSStructure());
table.setNullSelectionAllowed(false);
table.setColumnCollapsingAllowed(true);

// turn on column reordering and collapsing
table.setColumnReorderingAllowed(true);
table.setColumnCollapsingAllowed(true);

// set column headers
table.setColumnHeaders(new String[] {"ID","Name", "Short Name","Satus","ROD"});
table.setVisibleColumns(new Object[] {"id", "name","shortName", "status","rod"});

table.addActionHandler(new Action.Handler()
{
public Action[] getActions(Object target, Object sender)
{
Item selectedItem = table.getContainerDataSource().getItem(target);

if(selectedItem == null)
return NULL_MENU_ACTIONS;
else
{
return SELECT_MENU_ACTIONS;
}
}

public void handleAction(Action action, Object sender, Object target)
{
// TODO Auto-generated method stub
if (ACTION_ADD == action)
{
try
{
showAddForm(table); // Takes input and inset a new row in the PagedTable
}catch(Exception ex)
{
getWindow().showNotification(
"Error!", ex.getMessage(),
Notification.TYPE_ERROR_MESSAGE);
}
return;
}
else if (ACTION_EDIT == action)
{
g_selectedItem = table.getContainerDataSource().getItem(target);
if(g_selectedItem == null)
return;

// showEditForm();
return;
}

}
});

setWidth("100%");
loadTableRecords(table.getContainerDataSource());
addComponent(table);
addComponent(table.createControls());
table.setPageLength(5); // Call this method only after calling table.createControls();

}

private IndexedContainer getDSStructure()
{
IndexedContainer container = new IndexedContainer();

container.addContainerProperty("id", String.class,null);
container.addContainerProperty("name", String.class,null);
container.addContainerProperty("shortName", String.class,null);
container.addContainerProperty("status", String.class,null);
container.addContainerProperty("rod", String.class,null);

return container;
}

private void loadTableRecords(Indexed container ) throws Exception
{
Listlist = application.getNBBean().readAll();
for(int i=0;i<list.size();i++)
{
addRow(container, list.get(i));
}
}

private Item addRow(Indexed container, NBPojo data)
{
SimpleDateFormat df = new SimpleDateFormat ("dd-MM-yyyy hh:mm:ss aa");

Item item = container.addItem(data.getID());
item.getItemProperty("id").setValue(data.getID());
item.getItemProperty("name").setValue(data.getName());
item.getItemProperty("shortName").setValue(data.getShortName());
item.getItemProperty("status").setValue(data.getFriendlyStatus());
item.getItemProperty("rod").setValue( df.format(data.getRod()));

return item;
}

finally I am displaying a Window when user right clicks and chooses Add menu item and inside the form I am capturing data to be displayed in the PagedTable

showAddForm(final PagedTable table)
{
...
...
...

public void buttonClick(ClickEvent event)
{

try
{
frm.commit();
}catch(Exception ex)
{
return;
}

try
{
long id;
String name;
String shortName;
String status;

id = Long.parseLong((String)((TextField)frm.getField("id")).getValue());
name = (String)((TextField)frm.getField("name")).getValue();
shortName = (String)((TextField)frm.getField("shortName")).getValue();

if(((String)cbStatus.getValue()).compareTo("Up") == 0)
{
status = "U";
}
else if(((String)cbStatus.getValue()).compareTo("Down") == 0)
{
status = "D";
}
else if(((String)cbStatus.getValue()).compareTo("Inactive") == 0)
{
status = "I";
}
else
{
throw new Exception("Invalid Status [" + (String)cbStatus.getValue() + "]");
}

NBPojo dataObject = addUser(id, name, shortName, status); // Insert into Database

Item item = addRow(table.getContainerDataSource(), dataObject); // Insert into PagedTable - NOT DISPLAYED
//table.setCurrentPage(table.getCurrentPage()); // Refresh Table with added Item
((Window) wnd.getParent()).removeWindow(wnd);

}catch(DuplicateEntityException dee)
{
dee.printStackTrace();
getWindow().showNotification(
"Duplicate!", dee.getMessage(),
Notification.TYPE_ERROR_MESSAGE);

}catch(Exception ex)
{
ex.printStackTrace();
getWindow().showNotification(
"Error!", ex.getMessage(),
Notification.TYPE_ERROR_MESSAGE);

}
}
});
}

Am I doing anything Wrong! or is there any workaround ?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions