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 java.io.Serializable;

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) {
		this.setCore(data);
		this.setMethodName(method);
	}
	
	public SelectionObject(Object[] data) {
		this.setCore(data);
		this.setMethodName("toString");
	}
	
	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) {
			e.printStackTrace();
		}
		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;
	}

       @Perstist
       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.

  • No labels