struts-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "CRANFORD, CHRIS" <Chris.Cranf...@setech.com>
Subject Problem using TypeConverters with SelectTag
Date Fri, 24 Apr 2015 13:16:01 GMT
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.cranford@setech.com<mailto:chris.cranford@setech.com>


Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message