- Revision
- 737
- Author
- mauro
- Date
- 2008-06-18 16:33:15 -0500 (Wed, 18 Jun 2008)
Log Message
Updated freemarker example to show how a custom list value converter can be applied to a business model interface. Updated FTL to use new form macros and functions.
Modified Paths
- trunk/examples/freemarker-example/src/main/java/org/codehaus/waffle/example/freemarker/FreemarkerRegistrar.java
- trunk/examples/freemarker-example/src/main/java/org/codehaus/waffle/example/freemarker/model/Person.java
- trunk/examples/freemarker-example/src/main/java/org/codehaus/waffle/example/freemarker/persister/PersistablePerson.java
- trunk/examples/freemarker-example/src/main/webapp/people/edit.ftl
Added Paths
- trunk/examples/freemarker-example/src/main/java/org/codehaus/waffle/example/freemarker/converters/
- trunk/examples/freemarker-example/src/main/java/org/codehaus/waffle/example/freemarker/converters/PersonListValueConverter.java
Diff
Modified: trunk/examples/freemarker-example/src/main/java/org/codehaus/waffle/example/freemarker/FreemarkerRegistrar.java (736 => 737)
--- trunk/examples/freemarker-example/src/main/java/org/codehaus/waffle/example/freemarker/FreemarkerRegistrar.java 2008-06-18 21:31:24 UTC (rev 736) +++ trunk/examples/freemarker-example/src/main/java/org/codehaus/waffle/example/freemarker/FreemarkerRegistrar.java 2008-06-18 21:33:15 UTC (rev 737) @@ -6,10 +6,13 @@ import java.util.Properties; import org.codehaus.waffle.ComponentRegistry; +import org.codehaus.waffle.bind.ValueConverter; +import org.codehaus.waffle.bind.ValueConverterFinder; import org.codehaus.waffle.bind.converters.AbstractValueConverter; import org.codehaus.waffle.bind.converters.DateValueConverter; import org.codehaus.waffle.example.freemarker.controller.DateProvider; import org.codehaus.waffle.example.freemarker.controller.PersonController; +import org.codehaus.waffle.example.freemarker.converters.PersonListValueConverter; import org.codehaus.waffle.example.freemarker.persister.SimplePersonPersister; import org.codehaus.waffle.registrar.AbstractRegistrar; import org.codehaus.waffle.registrar.Registrar; @@ -33,6 +36,9 @@ } registerInstance(dateProvider); register(SimplePersonPersister.class); + register(PersonListValueConverter.class); + ValueConverterFinder finder = registry.locateByType(ValueConverterFinder.class); + finder.registerConverter((ValueConverter) getRegistered(PersonListValueConverter.class)); } @Override
Added: trunk/examples/freemarker-example/src/main/java/org/codehaus/waffle/example/freemarker/converters/PersonListValueConverter.java (0 => 737)
--- trunk/examples/freemarker-example/src/main/java/org/codehaus/waffle/example/freemarker/converters/PersonListValueConverter.java (rev 0) +++ trunk/examples/freemarker-example/src/main/java/org/codehaus/waffle/example/freemarker/converters/PersonListValueConverter.java 2008-06-18 21:33:15 UTC (rev 737) @@ -0,0 +1,47 @@ +package org.codehaus.waffle.example.freemarker.converters; + +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; + +import org.codehaus.waffle.bind.ValueConverter; +import org.codehaus.waffle.example.freemarker.model.Person; +import org.codehaus.waffle.example.freemarker.persister.PersonPersister; + +/** + * ValueConverter for person lists as retrieved from persistable id + * + * @author Mauro Talevi + */ +public class PersonListValueConverter implements ValueConverter { + + private final PersonPersister persister; + + public PersonListValueConverter(PersonPersister persister){ + this.persister = persister; + } + + public boolean accept(Type type) { + if (type instanceof ParameterizedType) { + ParameterizedType parameterizedType = (ParameterizedType) type; + Type rawType = parameterizedType.getRawType(); + Type argumentType = parameterizedType.getActualTypeArguments()[0]; + return List.class.isAssignableFrom((Class<?>) rawType) + && Person.class.isAssignableFrom((Class<?>) argumentType); + } + return false; + } + + public Object convertValue(String propertyName, String value, Type toType) { + String[] values = value.split(","); + List<Person> list = new ArrayList<Person>(); + for (String current : values) { + if (current.trim().length() > 0) { + list.add(persister.findById(Long.valueOf(current))); + } + } + return list; + } + +}
Modified: trunk/examples/freemarker-example/src/main/java/org/codehaus/waffle/example/freemarker/model/Person.java (736 => 737)
--- trunk/examples/freemarker-example/src/main/java/org/codehaus/waffle/example/freemarker/model/Person.java 2008-06-18 21:31:24 UTC (rev 736) +++ trunk/examples/freemarker-example/src/main/java/org/codehaus/waffle/example/freemarker/model/Person.java 2008-06-18 21:33:15 UTC (rev 737) @@ -23,6 +23,8 @@ Date getBirthTime(); + List<Person> getFriends(); + List<String> getSkills(); List<Integer> getLevels();
Modified: trunk/examples/freemarker-example/src/main/java/org/codehaus/waffle/example/freemarker/persister/PersistablePerson.java (736 => 737)
--- trunk/examples/freemarker-example/src/main/java/org/codehaus/waffle/example/freemarker/persister/PersistablePerson.java 2008-06-18 21:31:24 UTC (rev 736) +++ trunk/examples/freemarker-example/src/main/java/org/codehaus/waffle/example/freemarker/persister/PersistablePerson.java 2008-06-18 21:33:15 UTC (rev 737) @@ -24,6 +24,7 @@ private String notes; private boolean wizard; private Type type; + private List<Person> friends; public PersistablePerson() { id = new Long(0); @@ -33,6 +34,7 @@ dateOfBirth = new Date(); birthDay = new Date(); birthTime = new Date(); + friends = new ArrayList<Person>(); skills = new ArrayList<String>(); levels = new ArrayList<Integer>(); grades = new ArrayList<Double>(); @@ -49,6 +51,7 @@ this.dateOfBirth = person.getDateOfBirth(); this.birthDay = person.getBirthDay(); this.birthTime = person.getBirthTime(); + this.friends = person.getFriends(); this.skills = person.getSkills(); this.levels = person.getLevels(); this.grades = person.getGrades(); @@ -113,6 +116,14 @@ this.birthTime = birthTime; } + public List<Person> getFriends() { + return friends; + } + + public void setFriends(List<Person> friends) { + this.friends = friends; + } + public List<String> getSkills() { return skills; } @@ -169,5 +180,5 @@ public String toString() { return ToStringBuilder.reflectionToString(this, SHORT_PREFIX_STYLE); } - + }
Modified: trunk/examples/freemarker-example/src/main/webapp/people/edit.ftl (736 => 737)
--- trunk/examples/freemarker-example/src/main/webapp/people/edit.ftl 2008-06-18 21:31:24 UTC (rev 736) +++ trunk/examples/freemarker-example/src/main/webapp/people/edit.ftl 2008-06-18 21:33:15 UTC (rev 737) @@ -50,6 +50,11 @@ </#if> </p> <p class="fieldRow"> + <label for="" + <@w.hidden "person.friends" ""/> + <@w.selectMultiple "person.friends" w.asNameables(controller.getPeople(),"id","firstName") w.asValues(person.getFriends(),"id") "size='5'"/> + </p> + <p class="fieldRow"> <label for="" <@w.hidden "person.skills" ""/> <@w.selectMultiple "person.skills" controller.getSkills() person.getSkills() "size='5'"/> @@ -64,7 +69,7 @@ </p> <p class="fieldRow"> <label for="" - <@w.selectSingle "person.type" controller.getTypes() person.getType()/> + <@w.selectSingle "person.type" w.asNameables(controller.getTypes(),"name()","name()") person.getType()/> </p> <p class="fieldRow"> <label for="" wizard:</label>
To unsubscribe from this list please visit:
