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]