# BackingBean HtmlDataTable ContextMenu



## knoppers (22. Jan 2010)

Hier mal wieder ein neues großes Problem von mir,

Ich muss bestimmte Teile meines Projektes über BackingBeans lösen, also per JavaCode ausproprammieren. Hab jetzt folgendes Problem. Ich habe ein HtmlPanel was ein HtmlDataTable beinhaltet. Bei dem HtmlDataTable hat man in jeder Zelle die Möglichkeit ein ContextMenu aufzurufen. Nach dem Aufruf soll mir ein anderes HtmlPanel neu gerendert werden. Dies funktioniert leider aber nicht. Ich hab mal einfach zum testen ein anderes HtmlPanel mit einem ContextMenu versehen und da geht es wunderbar. Sobald ich dies aber bei dem HtmlDataTable versuche, geht dies nicht. Hier einfach mal das Code Beispiel. Würde mich über jede mögliche Lösung freuen.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:rich="http://richfaces.org/rich"
	xmlns:a4j="http://richfaces.org/a4j">
<head>
<style type="text/css">
</style>
</head>
<body>
<h:form id="form">
	<richanel binding="#{transporterBackingBean.pnlTour}" />
	<richanel binding="#{transporterBackingBean.pnlSide}" id="side" />
</h:form>
</body>
</html>


```
public class TransporterBackingBean implements Serializable {
	private Integer actTourNumber;
	private ArrayList<Tour> tours;
	private HtmlPanel pnlTour;
	private HtmlPanel pnlSide;

	public TransporterBackingBean() {
		TourDAO tdao = new TourDAO();
                // get the data from database
		setTours((ArrayList<Tour>) tdao.select());
		this.actTourNumber = 0;

                // table with data
		HtmlDataTable tableTour = new HtmlDataTable();
		tableTour.setReRender("side");
		tableTour.setVar("tour");
		tableTour.setId("tour");
		tableTour.setValueExpression("value", createValueExpression(
                             #{transporterBackingBean.tours}", ArrayList.class));
                
                // context menu on cell
                ContextMenu conTour = new ContextMenu();
		conTour.setSubmitMode("ajax");
		Application app = FacesContext.getCurrentInstance().getApplication();
		HtmlMenuItem miWork = (HtmlMenuItem)app.
                              createComponent(HtmlMenuItem.COMPONENT_TYPE);
		miWork.setValue("Beladebild");
		miWork.setReRender("side");
		miWork.setActionListener(createMethodBinding("#
                              {transporterBackingBean.takeTourRow}",
                               new Class[] { ActionEvent.class }));
		conTour.getChildren().add(miWork);

                // column
		HtmlColumn column = new HtmlColumn();
		column.setTransient(true);

                // cell content
		HtmlOutputText output = new HtmlOutputText();
		output.setValueExpression("value", createValueExpression("
                           #{tour.number}", Integer.class));

                column.getChildren().add(conTour);
		column.getChildren().add(output);
		tableTour.getChildren().add(column);

		pnlTour = new HtmlPanel();
		pnlTour.getChildren().add(tableTour);

		pnlSide = new HtmlPanel();
		HtmlOutputText test = new HtmlOutputText();
		test.setValueExpression("value",
		createValueExpression("#{transporterBackingBean.actTourNumber}", 
                               Integer.class));
		pnlSide.getChildren().add(test);
	}

        // set the act tour number
	public void takeTourRow(ActionEvent event) {
		this.setActTourNumber(2);
	}

        // create the method binding
	public MethodBinding createMethodBinding(String action, Class<?>[] param) {
		return FacesContext.getCurrentInstance().getApplication()
                         .createMethodBinding(action, param);
	}

        // get and set methods by instances
}
```


----------



## MrWhite (22. Jan 2010)

Wenns anders wirklich nicht geht:

Pack alles in ein <a4jutputPanel ajaxRendered="true"> Tag.

Musste ich auch ab und zu machen. Das Rerendering von Richfaces funktioniert oft nicht (aus mir nicht ersichtlichen Gründen).


----------



## knoppers (22. Jan 2010)

ich musste noch folgende Dinge zusätzlich setzen.


```
tableTour.setTransient(false);
		tableTour.setInView(true);

		column.setBreakBefore(false);
		column.setFilterEvent("onchange");
		column.setFilterExpression(false);
		column.setInView(true);
		column.setTransient(false);
		column.setVisible(true);
```

aber trotzdem Danke.


----------

