I have defined a simple POJO and type converter shown here: // Model POJO public class SiteSelection { private String type; private String label; private List<Long> ids = new ArrayList<Long>(); /* getter & setters */ }
// Converter public class SiteSelectionTypeConverter extends StrutsTypeConverter { @Override public Object convertFromString(Map context, String[] values, Class toClass) { /* converts values[0] from '{type}:{comma-separted list of ids} */ } @Override public String convertToString(Map context, Object object) { /* converts object to string using format '{type}:{comma-separated list of ids} */ } } // Action public class SomeAction extends ActionSupport implements Preparable { private List<SiteSelection> siteSelections; private SiteSelection selectedSite; /* getter & setters */ } In the JSP, I have used the select tag as follows <s:select name="selectedSite" list="siteSelections" /> The type converters get used and the select is populated with the appropriate key/value pairs. The problem is when I take a specific entry in the siteSelections and set it on the selectedSite property during the initial render or populate selectedSite and re-render the input page during say a validation failure, the select tag doesn't apply the "selected" attribute on any options. This seems to be an issue with how parameters.nameValue is being determined in the taglib java code and the fact that the template compares this parameter against itemKey rather than itemKeyStr. In the case of using type conversion, the itemKey is something like "com.app.SiteSelection@2b3a51e" where as itemKeyStr is "A:1,2,3". Can someone explain to me what was the intended way to use TypeConverter implementations with a select tag? The only way I've been able to hack around this issue is <s:set var="selectedSiteStr" value="selectedSite" /> <s:select name="selectedSite" value="#selectedSiteStr" list="siteSelections" template="my-custom-select" /> and modifying the select.ftl line 107 from: <#if tag.contains(parameters.nameValue, itemKey) == true> To: <#if tag.contains(parameters.nameValue, itemKeyStr) == true> But I'm not sure what side effects such a change would have. ___________________________________________________________ Chris Cranford SAP/Oracle/J2EE Applications Developer SETECH Inc & Companies 903 Industrial Drive, Murfreesboro TN 37129 Phone: (615) 890-1755 x361, Fax: (615) 890-9057, Mobile: (704) 650-1042 Email: chris.cranf...@setech.com<mailto:chris.cranf...@setech.com>