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]