NOTE: This is outdated information that applies only to Tapestry 4.

A simple example for using a property selection

The first step is to design an HTML template. In this template you must include a Tapestry tag like this:

<span jwcid="@PropertySelection" value="ognl:propertyName" model="ognl:collectionName"></span>

Next, you must define a class. This class must implement the IPropertySelectionModel Interface:


import org.apache.tapestry.form.IPropertySelectionModel;

public class SelectionObject implements IPropertySelectionModel, Serializable {
        private static final long serialVersionUID = 1L;
        private Object[] core;
        private String methodName;
        private String getMethodName() {
                return methodName;
        private void setMethodName(String methodName) {
                this.methodName = methodName;
        private Object[] getCore() {
                return core;
        private void setCore(Object[] core) {
                this.core = core;
        public SelectionObject(Object[] data,String method) {
        public SelectionObject(Object[] data) {
        public int getOptionCount() {
                return this.getCore().length;
        public Object getOption(int arg0) {
                return this.getCore()[arg0];
        public String getLabel(int arg0) {
                try {
                        return this.getCore()[arg0].getClass().getMethod(this.getMethodName(),new Class[]{}).invoke(this.getCore()[arg0],new Object[]{}).toString();
                } catch (Exception e) {
                return null;
        public String getValue(int arg0) {
                return Integer.toString(arg0);
        public Object translateValue(String arg0) {
                int index;
                index = Integer.parseInt(arg0);
                return this.getCore()[index]; 

This class can contain any object's cain. Please see the constructor with 2 parameters. The first parameter is an array of objects. These objects will be assigned to the property. The second parameter is a String with the method name for invoking and obtaining the representation for the user in the combo box.

And then in your Page Implementation you must include code like this:

public abstract class YourPage implements PageBeginRenderListener{
        private IPropertySelectionModel collectionName;

        public void pageBeginRender(PageEvent event){
                this.setCollectionName(new SelectionObject(youObjectArray[],"youMethod"));
        public IPropertySelectionModel getCollectionName() {
                return collectionName;
        public void setCollectionName(IPropertySelectionModel collection) {
                this.collectionName = collection;

       public abstract youObject getPropertyName();
       public abstract void setPropertyName(youObject);


When submitted, the property PropertyName will be set with the object selected in the combo box for the user.

PropertySelectionForAll (last edited 2011-01-02 16:09:44 by BobHarner)