cancel
Showing results for 
Search instead for 
Did you mean: 

HTMLB TableView sort with Java Dynpage

Former Member
0 Kudos

I am trying to create a sortable HTMLB table using the following document.

http://www.sdn.sap.com/irj/scn/index?rid=/library/uuid/80a7eef2-9a2c-2a10-12bb-abad552f3302&override...

But after I click on the header, the page refreshes but doesn't sort the table. I can see the onHeaderClick method being called and the SortTableModel (Code from Appendix-A in the document) is also called to sort the table but the result doesn't show up on the page.

I am assuming that its probably the "request_attr" that the document refers to that I don't fully understand... any help is appreciated. My code is below.

Also I have spent 2 days trying to sort the table but to no avail. Is "request_attr" supposed to be the table's name, or model name or what??

Accepted Solutions (0)

Answers (1)

Answers (1)

Former Member
0 Kudos

Here is the code part 1 of 2

public void buildWelcomePage() {
		ResourceBundle res = request.getResourceBundle();
		TextView txt = new TextView("userMsg");
			Vector colNames =	new Vector(Arrays.asList(new String[] { "Name", "Agr. Level", "Hits" }));
			Vector dataVec = createData();
			SortTableModel model = new SortTableModel(dataVec, colNames, 3);
			TableView tableView = new TableView("tableView", model);
			tableView.setHeaderVisible(true);
			tableView.setHeaderText("User History");
			tableView.setFooterVisible(true);
			tableView.setDesign(TableViewDesign.ALTERNATING);
			for (int i = 1; i <= tableView.getColumnCount(); i++) {
				tableView.getColumn(i).setTitle(request.getResourceBundle().getString(tableView.getColumnName(i)));
			        tableView.getColumn(i).setOnHeaderSort("onHeaderClick");
			}
			setSortTable(tableView, ((SortTableModel)tableView.getModel()).getColumnSortStatus(), "onHeaderClick");
			form.addComponent(tableView);
			IPortalComponentSession session = request.getComponentSession();
			session.putValue("tableView", tableView.getModel());
		}

public void setSortTable(	TableView tableView,	Vector columnList,	String sortMethod) 
	{
		tableView.setOnHeaderClick(sortMethod);
		Integer val = new Integer(0);
		TableSortState state = TableSortState.NONE;
		if (columnList != null) {
			for (int i = 0; i < tableView.getColumnCount(); i++) {
				val = (Integer) columnList.get(i);
				switch (val.intValue()) {
					case 0 :
						state = TableSortState.NONE;
						break;
					case 1 :
						state = TableSortState.DESCENDING;
						break;
					case -1 :
						state = TableSortState.ASCENDING;
						break;
				}
				tableView.getColumn(i + 1).setSortState(state);
			}
		}
	}
	

Former Member
0 Kudos

Here is the code part 2 of 2

private Vector createData() {
		Vector dataVec = new Vector();
		Vector retVector = new Vector();
		dataVec = new Vector();
		dataVec.addElement("D");
		dataVec.addElement("Daisy");
		dataVec.addElement("Doodle");
		retVector.addElement(dataVec);
		dataVec = new Vector();
		dataVec.addElement("C");
		dataVec.addElement("Cherry");
		dataVec.addElement("Crimson Roll");
		retVector.addElement(dataVec); /* 3st entry */
		dataVec = new Vector();
		dataVec.addElement("A");
		dataVec.addElement("Apple");
		dataVec.addElement("Apricot");
		retVector.addElement(dataVec); /* 4nd entry */
		dataVec = new Vector();
		dataVec.addElement("B");
		dataVec.addElement("Bananna");
		dataVec.addElement("Blue Berry");
		retVector.addElement(dataVec); /* 4nd entry */
		return retVector;
	}

public void onHeaderClick(Event event) {
			IPortalComponentRequest request = (IPortalComponentRequest) this.getRequest();
			IPortalComponentSession session = request.getComponentSession();
			SortTableModel model = (SortTableModel) session.getValue("tableView");
			try{
				TableHeaderSortEvent tHEvent = (TableHeaderSortEvent)event;
				if (model != null){
					model.sortByColumn(tHEvent.getColumn()-1);
					request.getServletRequest().setAttribute("tableView",model);
				}
				session.putValue("tableView", model);
			}
		}

Former Member
0 Kudos

Solved this on my own. Its was stupid. Was creating a new TableView every time on the page start instead of getting one from the session.