We are getting a type mismatch error, while converting our string id to Brand object. We have searched this forum and followed pretty much all steps, still could not resolve it. Could u please, take a look at our configuration and our customer conversion service code and help us resolving this error.
<mvc:annotation-driven conversion-service="conversionService"/>
<bean id="conversionService" class="com.latchiya.util.MreachConversionService" />
<bean id="flowMappings" class="org.springframework.webflow.mvc.servlet.FlowHandlerMapping">
<property name="flowRegistry" ref="flowRegistry"/>
<property name="order" value="0" />
</bean>
<bean class="org.springframework.webflow.mvc.servlet.FlowHandlerAdapter">
<property name="flowExecutor" ref="flowExecutor"/>
</bean>
<!-- Executes flows: the entry point into the Spring Web Flow system -->
<webflow:flow-executor id="flowExecutor">
<webflow:flow-execution-listeners>
<webflow:listener ref="securityFlowExecutionListener" />
</webflow:flow-execution-listeners>
</webflow:flow-executor>
<!-- The registry of executable flow definitions -->
<webflow:flow-registry id="flowRegistry"
flow-builder-services="flowBuilderServices">
<webflow:flow-location-pattern value="/WEB-INF/flows/**/*-flow.xml" />
</webflow:flow-registry>
<!-- Plugs in a custom creator for Web Flow views -->
<webflow:flow-builder-services id="flowBuilderServices"
conversion-service="flowConversionService"
view-factory-creator="mvcViewFactoryCreator" />
<bean id="flowConversionService" class="org.springframework.binding.convert.service.DefaultConversionService" >
<constructor-arg ref="conversionService"/>
</bean>
<!-- Configures Web Flow to use Tiles to create views for rendering; Tiles allows for applying consistent layouts to your views -->
<bean id="mvcViewFactoryCreator"
class="org.springframework.webflow.mvc.builder.MvcViewFactoryCreator"
p:viewResolvers-ref="viewResolver" />
<!-- Installs a listener to apply Spring Security authorities -->
<bean id="securityFlowExecutionListener"
class="org.springframework.webflow.security.SecurityFlowExecutionListener" />
<bean name="/socialmediacoupon-flow" class="org.springframework.webflow.mvc.servlet.FlowController">
<property name="flowExecutor" ref="flowExecutor"/>
</bean>
// Branch Class contains Brand Property
public class Branch extends com.latchiya.model.BaseObject implements java.io.Serializable {
// Fields
private Brand brand
// other fields and getters and setters
}
//Our Custom Converter
@Component
final public class MreachConversionService extends org.springframework.context.support.ConversionServiceFactoryBean
{
public MreachConversionService()
{
HashSet s = new HashSet();
s.add(new MreachObjectConverterFactory());
super.setConverters(s);
}
final public class MreachObjectConverterFactory implements ConverterFactory<String,BaseObject>
{
@Override
public <T extends BaseObject> Converter<String, T> getConverter( Class<T> type )
{
return new MreachObjectConverter(type);
}
final public class MreachObjectConverter<T> implements Converter<String, T>
{
private Manager mgr;
Class type;
public void setMgr(Manager mgr)
{
this.mgr = mgr;
}
/**
*
* @param type An instance of Class for the type being converted to
* @param mgr used to perform the lookup.
*/
public MreachObjectConverter( Class<T> type)
{
this.type = type;
}
@Override
public T convert( String id )
{
System.out.println("Brand is : " + type);
System.out.println("Brand id is : " + id);
return (T)mgr.getObject(type, java.lang.Long.valueOf(id));
}
}
}
}
<!-- Our JSP -->
<form:form styleId="branchForm" commandName="branch">
<form:select path="brand" class="validate[required] select_medium" id="brandId" >
<form:option value="${null}" label="SELECT"/>
<form:options items="${brandList}"/>
</form:select>
<input type="submit" id="next" name="_eventId_save" value="Proceed"></input>
</form:form>
// Our Flow.xml
<view-state id="showBusinessAndLocation" view="../flows/common/resellerBranchForm" model="branch">
<transition on="save" to="showCampaignInfo" >
<evaluate expression="campaignService.saveBranch(branch,userManager.getUserByUsername(currentUser.getName()))" result="flowScope.branch"/>
</transition>
</view-state>
// Our Error
2013-09-26 13:47:27,359 DEBUG [http-bio-8443-exec-10] view.AbstractMvcView (AbstractMvcView.java:218) - Processing user event 'save'
2013-09-26 13:47:27,359 DEBUG [http-bio-8443-exec-10] view.AbstractMvcView (AbstractMvcView.java:223) - Resolved model com.latchiya.model.Branch@15197119 [branchName='null' addrLine1='null' addrLine2='null' addrLine3='null' city='null' zipcode='null' state='null' country='null' phoneLandline1='null' phoneLandline2='null' phoneFax='null' phoneCell='null' shortCode='null' status='null' emailId='null' contactName='null' createdOn='null' createdBy='null' modifiedOn='null' modifiedBy='null' ]
2013-09-26 13:47:27,359 DEBUG [http-bio-8443-exec-10] view.AbstractMvcView (AbstractMvcView.java:384) - Binding to model
2013-09-26 13:47:27,375 DEBUG [http-bio-8443-exec-10] view.AbstractMvcView (AbstractMvcView.java:513) - Adding default mapping for parameter 'shortCode'
2013-09-26 13:47:27,375 DEBUG [http-bio-8443-exec-10] view.AbstractMvcView (AbstractMvcView.java:513) - Adding default mapping for parameter 'branchId'
2013-09-26 13:47:27,390 DEBUG [http-bio-8443-exec-10] view.AbstractMvcView (AbstractMvcView.java:513) - Adding default mapping for parameter 'execution'
2013-09-26 13:47:27,390 DEBUG [http-bio-8443-exec-10] view.AbstractMvcView (AbstractMvcView.java:513) - Adding default mapping for parameter 'brand'
2013-09-26 13:47:27,390 DEBUG [http-bio-8443-exec-10] impl.DefaultMapper (DefaultMapper.java:60) - Beginning mapping between source [org.springframework.webflow.core.collection.LocalParameterMap] and target [com.latchiya.model.Branch]
2013-09-26 13:47:27,390 DEBUG [http-bio-8443-exec-10] impl.DefaultMapping (DefaultMappingContext.java:147) - Adding mapping result [Success@421dc mapping = parameter:'shortCode' -> shortCode, code = 'success', error = false, originalValue = '', mappedValue = '']
2013-09-26 13:47:27,390 DEBUG [http-bio-8443-exec-10] impl.DefaultMapping (DefaultMappingContext.java:147) - Adding mapping result [Success@1930aa0 mapping = parameter:'branchId' -> branchId, code = 'success', error = false, originalValue = '', mappedValue = '']
2013-09-26 13:47:27,406 DEBUG [http-bio-8443-exec-10] impl.DefaultMapping (DefaultMappingContext.java:147) - Adding mapping result [TargetAccessError@2864cd mapping = parameter:'execution' -> execution, code = 'propertyNotFound', error = true, errorCause = org.springframework.binding.expression.PropertyNotFoundException: Property not found, originalValue = 'e1s1', mappedValue = [null]]
2013-09-26 13:47:27,406 DEBUG [http-bio-8443-exec-10] impl.DefaultMapping (DefaultMappingContext.java:147) - Adding mapping result [TargetAccessError@b98ed9 mapping = parameter:'brand' -> brand, code = 'typeMismatch', error = true, errorCause = org.springframework.binding.expression.ValueCoercionException: Value could not be converted to target class; is a suitable type converter registered?, originalValue = '526', mappedValue = [null]]
2013-09-26 13:47:27,406 DEBUG [http-bio-8443-exec-10] impl.DefaultMapper (DefaultMapper.java:69) - Completing mapping between source [org.springframework.webflow.core.collection.LocalParameterMap] and target [com.latchiya.model.Branch]; total mappings = 4; total errors = 2
2013-09-26 13:47:27,406 DEBUG [http-bio-8443-exec-10] view.AbstractMvcView (AbstractMvcView.java:230) - Model binding resulted in errors; adding error messages to context
2013-09-26 13:47:27,421 DEBUG [http-bio-8443-exec-10] message.DefaultMessageContext (DefaultMessageContext.java:114) - Resolving message using ***[DefaultMessageResolver@307b0e source = 'brand', severity = ERROR, codes = array<String>['branch.brand.typeMismatch', 'brand.typeMismatch', 'com.latchiya.model.Brand.typeMismatch', 'typeMismatch'], args = array<Object>[[MessageBuilder.ResolvableArgument@df0dac arg = 'brand']], defaultText = 'typeMismatch on brand']
2013-09-26 13:47:27,421 DEBUG [http-bio-8443-exec-10] message.DefaultMessageContext (DefaultMessageContext.java:119) - Adding resolved message [Message@1fad846 source = 'brand', severity = ERROR, text = 'typeMismatch on brand']***