- Revision
- 616
- Author
- mauro
- Date
- 2008-04-14 17:55:39 -0500 (Mon, 14 Apr 2008)
Log Message
Enhanced ListValueConverter to return a List of different objects (Integer, Double, String) as appropriate. Added textAsCSV macro to waffle/form.ftl. Updated freemarker-example.
Modified Paths
- 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/editperson.htm
- trunk/waffle-core/src/main/java/org/codehaus/waffle/bind/converters/DateValueConverter.java
- trunk/waffle-core/src/main/java/org/codehaus/waffle/bind/converters/ListValueConverter.java
- trunk/waffle-resources/src/main/resources/ftl/waffle/form.ftl
Diff
Modified: trunk/examples/freemarker-example/src/main/java/org/codehaus/waffle/example/freemarker/model/Person.java (615 => 616)
--- trunk/examples/freemarker-example/src/main/java/org/codehaus/waffle/example/freemarker/model/Person.java 2008-04-14 19:11:32 UTC (rev 615) +++ trunk/examples/freemarker-example/src/main/java/org/codehaus/waffle/example/freemarker/model/Person.java 2008-04-14 22:55:39 UTC (rev 616) @@ -17,4 +17,8 @@ public List<String> getSkills(); + public List<Integer> getLevels(); + + public List<Double> getGrades(); + }
Modified: trunk/examples/freemarker-example/src/main/java/org/codehaus/waffle/example/freemarker/persister/PersistablePerson.java (615 => 616)
--- trunk/examples/freemarker-example/src/main/java/org/codehaus/waffle/example/freemarker/persister/PersistablePerson.java 2008-04-14 19:11:32 UTC (rev 615) +++ trunk/examples/freemarker-example/src/main/java/org/codehaus/waffle/example/freemarker/persister/PersistablePerson.java 2008-04-14 22:55:39 UTC (rev 616) @@ -14,6 +14,8 @@ private String email; private Date dateOfBirth; private List<String> skills; + private List<Integer> levels; + private List<Double> grades; public PersistablePerson() { id = new Long(0); @@ -22,6 +24,8 @@ email = ""; dateOfBirth = new Date(); skills = new ArrayList<String>(); + levels = new ArrayList<Integer>(); + grades = new ArrayList<Double>(); } public PersistablePerson(Person person) { @@ -31,6 +35,8 @@ this.email = person.getEmail(); this.dateOfBirth = person.getDateOfBirth(); this.skills = person.getSkills(); + this.levels = person.getLevels(); + this.grades = person.getGrades(); } public Long getId() { @@ -81,9 +87,22 @@ this.skills = skills; } - @Override - public String toString() { - return "Person "+firstName+" has skills "+skills; + public List<Integer> getLevels() { + System.out.println("Levels ... "+levels); + return levels; } + + public void setLevels(List<Integer> levels) { + this.levels = levels; + } + + public List<Double> getGrades() { + System.out.println("Grades ... "+grades); + return grades; + } + public void setGrades(List<Double> grades) { + this.grades = grades; + } + }
Modified: trunk/examples/freemarker-example/src/main/webapp/people/editperson.htm (615 => 616)
--- trunk/examples/freemarker-example/src/main/webapp/people/editperson.htm 2008-04-14 19:11:32 UTC (rev 615) +++ trunk/examples/freemarker-example/src/main/webapp/people/editperson.htm 2008-04-14 22:55:39 UTC (rev 616) @@ -27,15 +27,25 @@ <br style="clear:both"/> </div> <div class="fieldRow"> + <label for="" Of Birth:</label> + <@w.text "person.dateOfBirth" "${person.dateOfBirth?string('dd/MM/yyyy')}"/> + <br style="clear:both"/> + </div> + <div class="fieldRow"> <label for="" <@w.selectMultiple "person.skills" controller.getSkills() person.getSkills() "size='5'"/> <br style="clear:both"/> </div> <div class="fieldRow"> - <label for="" Of Birth:</label> - <@w.text "person.dateOfBirth" "${person.dateOfBirth?string('dd/MM/yyyy')}"/> + <label for="" + <@w.textAsCSV "person.levels" person.getLevels() /> <br style="clear:both"/> </div> + <div class="fieldRow"> + <label for="" + <@w.textAsCSV "person.grades" person.getGrades() /> + <br style="clear:both"/> + </div> <br/> <a href="" |
Modified: trunk/waffle-core/src/main/java/org/codehaus/waffle/bind/converters/DateValueConverter.java (615 => 616)
--- trunk/waffle-core/src/main/java/org/codehaus/waffle/bind/converters/DateValueConverter.java 2008-04-14 19:11:32 UTC (rev 615) +++ trunk/waffle-core/src/main/java/org/codehaus/waffle/bind/converters/DateValueConverter.java 2008-04-14 22:55:39 UTC (rev 616) @@ -40,16 +40,16 @@ public <T> T convertValue(String propertyName, String value, Class<T> toType) { String fieldName = messageResources.getMessageWithDefault(propertyName, propertyName); if (value == null || value.equals("")) { - String message = messageResources.getMessageWithDefault("bind.error.date.missing", "Missing date value for field ", fieldName); + String message = messageResources.getMessageWithDefault("bind.error.date.missing", "Missing date value for field {0}", fieldName); throw new BindException(message); } - String datePattern = messageResources.getMessageWithDefault("date.format", "dd/MM/yyyy"); + String dateFormat = messageResources.getMessageWithDefault("date.format", "dd/MM/yyyy"); try { - return (T) new SimpleDateFormat(datePattern).parse(value); + return (T) new SimpleDateFormat(dateFormat).parse(value); } catch (ParseException e) { - String message = messageResources.getMessageWithDefault("bind.error.date.invalid", "Date {1} invalid for field {0} with pattern {2}", fieldName, value, datePattern); + String message = messageResources.getMessageWithDefault("bind.error.date.invalid", "Invalid date {1} (using format {2}) for field {0}", fieldName, value, dateFormat); throw new BindException(message); } }
Modified: trunk/waffle-core/src/main/java/org/codehaus/waffle/bind/converters/ListValueConverter.java (615 => 616)
--- trunk/waffle-core/src/main/java/org/codehaus/waffle/bind/converters/ListValueConverter.java 2008-04-14 19:11:32 UTC (rev 615) +++ trunk/waffle-core/src/main/java/org/codehaus/waffle/bind/converters/ListValueConverter.java 2008-04-14 22:55:39 UTC (rev 616) @@ -10,8 +10,11 @@ *****************************************************************************/ package org.codehaus.waffle.bind.converters; +import static java.lang.Double.parseDouble; +import static java.lang.Integer.parseInt; import static java.util.Arrays.asList; +import java.util.ArrayList; import java.util.List; import org.codehaus.waffle.bind.BindException; @@ -19,8 +22,9 @@ import org.codehaus.waffle.i18n.MessageResources; /** - * <code>ValueConverter</code> that converts a CSV value to a List of Strings. - * A <code>null</code> value will cause a BindException to thrown. + * <code>ValueConverter</code> that converts a CSV value to a List. A <code>null</code> value will cause a + * BindException to thrown. The converter also looks to see if the values in the list are integers or doubles and if so + * parses them. * * @author Mauro Talevi */ @@ -41,10 +45,52 @@ if (value == null) { String fieldName = messageResources.getMessageWithDefault(propertyName, propertyName); String message = messageResources.getMessageWithDefault("bind.error.list.missing", - "Missing list value for field {0} for list {1}", fieldName); + "Missing list value for field {0}", fieldName); throw new BindException(message); } - return (T) asList(value.split(",")); + List<String> values = asList(value.split(",")); + if ( values.size() == 0 ){ + return (T) values; + } + if ( areIntegers(values) ){ + return (T) toIntegers(values); + } else if ( areDoubles(values)) { + return (T) toDoubles(values); + } + return (T) values; } + private boolean areIntegers(List<String> values) { + try { + parseInt(values.get(0)); + return true; + } catch ( NumberFormatException e) { + return false; + } + } + + private List<Integer> toIntegers(List<String> values) { + List<Integer> list = new ArrayList<Integer>(); + for ( String value : values ){ + list.add(parseInt(value)); + } + return list; + } + + private boolean areDoubles(List<String> values) { + try { + parseDouble(values.get(0)); + return true; + } catch ( NumberFormatException e) { + return false; + } + } + + private List<Double> toDoubles(List<String> values) { + List<Double> list = new ArrayList<Double>(); + for ( String value : values ){ + list.add(parseDouble(value)); + } + return list; + } }
Modified: trunk/waffle-resources/src/main/resources/ftl/waffle/form.ftl (615 => 616)
--- trunk/waffle-resources/src/main/resources/ftl/waffle/form.ftl 2008-04-14 19:11:32 UTC (rev 615) +++ trunk/waffle-resources/src/main/resources/ftl/waffle/form.ftl 2008-04-14 22:55:39 UTC (rev 616) @@ -20,6 +20,18 @@ </#function> <#-- + * Joins list values + * + * @param values the values to join + * @param separator the separator to join list with + --> +<#function join values separator> + <#assign result = ''> + <#list values as value>><#assign result=result+value><#if value_has_next><#assign result=result+separator></#if></#list> + <#return result> +</#function> + +<#-- * Shows values as CSV * * @param values the sequence of values @@ -62,6 +74,18 @@ </#macro> <#-- + * Show a text input element with a given values as CSV + * + * @param field the name of the field to bind the element to + * @param values the values + * @param attributes any additional attributes for the element (defaults to "") +--> +<#macro textAsCSV field values attributes=""> + <#assign csv=join(values,",")> + <input type="text" id="${field}" name="${field}" value="${csv}" ${attributes}/> +</#macro> + +<#-- * Show a select input element allowing a value to be chosen from a list of options. * * @param field the name of the field to bind the element to
To unsubscribe from this list please visit:
