Ted,

Thanks for the pointer, that made it stop giving me the error all right and now it displays.

Now all I have to do is figure out why it always comes back as null when I include it in my template.

Keith

On Sep 27, 2008, at 1:36 AM, Ted Steen wrote:

You should not put non-component code under component packages.
see http://tapestry.apache.org/tapestry5/guide/component-classes.html
move the CountryEncoder to something like com.shared.util instead.

2008/9/27 Keith Bottner <[EMAIL PROTECTED]>:
I am trying to use a bundle a select component for the specific case of displaying a list of countries and from the all the documentation that I have run across and I always get an exception when the page is rendered. It
says:

Component class com.shared.base.CountryEncoder may not be instantiated directly. You should use an @InjectPage or @InjectComponent annotation
instead.

Code is below, any help is appreciated.

public class CountryEncoder implements ValueEncoder<Country>
{

public String toClient( Country value )
{
  if (null == value) return null;

  return value.getName();
}

public Country toValue( String clientValue )
{
  if (InternalUtils.isBlank(clientValue)) return null;

  return DAO.getCountry(clientValue);
}

}

public class CountryOptionModel implements OptionModel
{
Country country;

public CountryOptionModel(Country country)
{
  this.country = country;
}

public String getLabel()
{
  return country.getName();
}

public Object getValue()
{
  return country;
}

public Map<String, String> getAttributes()
{
  return null;
}

public boolean isDisabled()
{
  return false;
}
}

public class CountrySelectModel implements SelectModel
{
private List<Country> countries;

public CountrySelectModel()
{
  countries = DAO.getCountries();
}

public List<OptionGroupModel> getOptionGroups()
{
  return null;
}

public List<OptionModel> getOptions()
{
  if (null != countries)
  {
    List<OptionModel> options = new ArrayList<OptionModel>();
    for (Country c : countries)
    {
      options.add(new CountryOptionModel(c));
    }
    return options;
  }

  return null;
}

public void visit( SelectModelVisitor visitor )
{
}
}

public class CountrySelect
{
private Country selectedCountry;

public Country getSelectedCountry()
{
  return selectedCountry;
}
public void setSelectedCountry(Country country)
{
  selectedCountry = country;
}

public CountrySelectModel getCountryModel()
{
  return new CountrySelectModel();
}

public CountryEncoder getCountryEncoder()
{
  return new CountryEncoder();
}
}

And my template has this.

<t:select t:value="selectedCountry" t:model="countryModel"
t:encoder="countryEncoder"/>


Any ideas?

Keith

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to