Hi Luther,

an alternative to contributing a DataTypeAnalyzer you could also use the
 annotation "DataType" on getters in your Entities so instead of doing

public static void contributeDefaultDataTypeAnalyzer
MappedConfiguration<Class, String> configuration)
{
  configuration.add(Category.class, "category");
}

you could do
public class User
{
...
  @DataType("category") // DataType needn't be analyzed, because you
                        // provide Tapestry with necessary information.
  public Category getCategory() {
    return this.category;
  }
...
}

lutherbaker schrieb:
> Thanks Uli!
> 
> 
> 
> Ulrich Stärk wrote:
>> Luther Baker schrieb:
>>> I have an entity that contains another entity - but this time, the
>>> contained
>>> entity table is quite finite - say, 10 rows.
>>>
>>> public class Category
>>> {
>>>   private String name;
>>> }
>>>
>>> public class User
>>> {
>>>    private String firstName;
>>>    private String lastName;
>>>    private Category category;
>>> }
>>>
>>> and in this case, I'd like to render firstName, lastName and a DROP DOWN
>>> or
>>> some type of picker from existing Categories.
>>>
>>> Would I need to create my own t:form ... and possibly use a t:BeanEditor
>>> with a custom drop down/picker -- or is this type of idiom encapsulated
>>> in a
>>> Tapestry component already?
>>>
>>> Thanks much,
>>>
>>> -Luther
>>>
>> Indeed you'll have to create a BeanBlockContribution and contribute it to
>> the BeanBlockSource 
>> service. This contribution tells tapestry where to look for the component,
>> that is responsible for 
>> rendering your type. Additionally you'll have to contribute your type to
>> the DefaultDataTypeAnalyzer 
>> service. That could look something along the lines of
>>
>> public static void contributeDefaultDataTypeAnalyzer(
>>          MappedConfiguration<Class, String> configuration)
>> {
>>      configuration.add(Category.class, "category");
>> }
>>
>> public static void
>> contributeBeanBlockSource(Configuration<BeanBlockContribution>
>> configuration)
>> {
>>      configuration.add(new BeanBlockContribution("category",
>> "AppPropertyEditBlocks", "category", 
>> true));
>> }
>>
>> AppPropertyEditBlocks is the name of a page that contains a component with
>> the id "category" that is 
>> responsible for rendering your category. In your case this would be a
>> select component:
>>
>> @Environmental
>> private PropertyEditContext context;
>>
>> @Component(parameters =
>> { "value=context.propertyValue", "label=prop:context.label",
>>    "model=prop:categoryModel", "encoder=prop:categoryEncoder",
>>    "clientId=prop:context.propertyId", "validate=prop:validator" })
>> private Select category;
>>
>> @Inject
>> private PropertyAccess propertyAccess;
>>
>> @SuppressWarnings({ "unused", "unchecked" })
>> public FieldValidator getValidator()
>> {
>>      return context.getValidator(category);
>> }
>>
>> public PropertyEditContext getContext() { return context; }
>>
>> public SelectModel<Category> getCategoryModel()
>> {
>>      ...
>> }
>>
>> public ValueEncoder<Category> getCategoryEncoder()
>> {
>>      ...
>> }
>> with the corresponding .tml:
>>
>> <div xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd";>
>>    <t:block t:id="category">
>>      <t:label for="category" />
>>      <t:select t:id="category" />
>>    </t:block>
>> </div>
>>
>> I believe that there is also some information about this on the wiki,
>> check it out!
>>
>> HTH,
>>
>> Uli
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
>> For additional commands, e-mail: users-h...@tapestry.apache.org
>>
>>
>>
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org

Reply via email to