You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by Burton Rhodes <bu...@gmail.com> on 2010/12/10 21:53:12 UTC

[S2.2.1] Struts Type Converter for "sub-model" objects not working?

I am having issues trying to get a Type Converter to run when
converting a field that is a "sub-object" of the main model.  For
example, I have a Contact class that contains a ContactLead class.  I
have an Action class that saves a new Contact and ContactLead at the
same time.  Originally, I set up my
ContactCreateAction-conversion.properties file to convert the
"contact.contactLead.income"  field (three levels deep).  However,
MyCurrencyConverter class never gets called.  I then changed my Action
and Jsp pages to have seperate Contact and ContactLead objects and
changed the conversion.properties file to convert
"contactLead.income".  In this case, MyCurrencyConverter is called and
everything works fine.

Although everything is fine, shouldn't the conversion be recursive?
Is this supposed to work, and I'm doing something wrong?  I have tried
it both ways several times to make sure I didn't just mess something
up, but each time I'm getting the same result.  Any comments welcome.

Below are code snippets only.

***  DOES NOT WORK ***
ContactCreateAction-conversion.properties:
contact.contactLead.income=com.afs.web.converter.MyCurrencyConverter

Jsp File:
<s:textfield name="contact.contactLead.income"
value="%{getText('format.money',{contact.contactLead.income != null ?
contact.contactLead.income :''})}"  />

***  DOES WORK ***
ContactCreateAction-conversion.properties:
contactLead.income=com.afs.web.converter.MyCurrencyConverter

Jsp File:
<s:textfield name="contactLead.income"
value="%{getText('format.money',{contactLead.income != null ?
contactLead.income :''})}"  />

**** The Contact Class ****
// Most code ommitted
public class Contact implements Serializable {

	@Id
	@GeneratedValue
	@Column(name = "ContactId")
	private Integer contactId;

	@OneToOne(cascade = { CascadeType.ALL }, fetch=FetchType.LAZY)
	@JoinColumn(name="ContactLeadId")
	private ContactLead contactLead;

            .......  More veriables and getters/setters below
}

*** THE ERROR ***
Dec 10, 14:41:49 (CommonsLogger.java:56)
WARN : The first TextProvider in the ValueStack
(com.afs.web.action.contact.ContactCreateAction) could not locate the
message resource with key 'contact.contactLead.income'
Dec 10, 14:41:49 (CommonsLogger.java:56)
WARN : The default value expression 'contact.contactLead.income' was
evaluated and did not match a property.  The literal value
'contact.contactLead.income' will be used.
Dec 10, 14:41:49 (CommonsLogger.java:56)
WARN : The first TextProvider in the ValueStack
(com.afs.web.action.contact.ContactCreateAction) could not locate the
message resource with key 'contact.contactLead.nextStepDate'
Dec 10, 14:41:50 (CommonsLogger.java:56)
WARN : The default value expression 'contact.contactLead.nextStepDate'
was evaluated and did not match a property.  The literal value
'contact.contactLead.nextStepDate' will be used.
Dec 10, 14:41:55 (CommonsLogger.java:60)
WARN : Error setting expression 'contact.contactLead.income' with
value '[Ljava.lang.String;@1fbc2c7'
ognl.MethodFailedException: Method "setIncome" failed for object
com.afs.entity.ContactLead@16e1c2c [java.lang.NoSuchMethodException:
com.afs.entity.ContactLead.setIncome([Ljava.lang.String;)]
        at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1285)
        at ognl.OgnlRuntime.setMethodValue(OgnlRuntime.java:1474)
        at ognl.ObjectPropertyAccessor.setPossibleProperty(ObjectPropertyAccessor.java:85)
        at ognl.ObjectPropertyAccessor.setProperty(ObjectPropertyAccessor.java:162)
        at com.opensymphony.xwork2.ognl.accessor.ObjectAccessor.setProperty(ObjectAccessor.java:27)
        at ognl.OgnlRuntime.setProperty(OgnlRuntime.java:2245)
        at ognl.ASTProperty.setValueBody(ASTProperty.java:127)
        at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:220)
        at ognl.SimpleNode.setValue(SimpleNode.java:301)
        at ognl.ASTChain.setValueBody(ASTChain.java:227)
        at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:220)
        at ognl.SimpleNode.setValue(SimpleNode.java:301)
        at ognl.Ognl.setValue(Ognl.java:737)
        at com.opensymphony.xwork2.ognl.OgnlUtil.setValue(OgnlUtil.java:209)
        at com.opensymphony.xwork2.ognl.OgnlValueStack.trySetValue(OgnlValueStack.java:173)
        at com.opensymphony.xwork2.ognl.OgnlValueStack.setValue(OgnlValueStack.java:160)
        at com.opensymphony.xwork2.ognl.OgnlValueStack.setValue(OgnlValueStack.java:151)
        at com.opensymphony.xwork2.interceptor.ParametersInterceptor.setParameters(ParametersInterceptor.java:288)
        at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:199)
        at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
        at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
        at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
        at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:190)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
        at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
        at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
        at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
        at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
        at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
        at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
        at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:142)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
        at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:166)
        at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
        at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
        at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
        at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:190)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
        at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
        at com.afs.web.interceptor.SessionInterceptor.intercept(SessionInterceptor.java:57)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
        at com.afs.web.interceptor.NoCacheInterceptor.intercept(NoCacheInterceptor.java:31)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
        at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
        at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:485)
        at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
        at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
        at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:368)
        at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109)
        at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
        at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:97)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
        at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:100)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
        at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:78)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
        at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:119)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
        at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
        at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:35)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
        at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:187)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
        at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
        at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
        at org.springframework.security.web.session.ConcurrentSessionFilter.doFilter(ConcurrentSessionFilter.java:109)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
        at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:169)
        at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
        at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
        at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
        at org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:113)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
        at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
        at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360)
        at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
        at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
        at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:726)
        at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
        at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:206)
        at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
        at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
        at org.mortbay.jetty.Server.handle(Server.java:324)
        at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
        at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:828)
        at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:514)
        at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
        at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
        at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
        at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:450)
Caused by: java.lang.NoSuchMethodException:
com.afs.entity.ContactLead.setIncome([Ljava.lang.String;)
        at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1226)
        ... 106 more
/-- Encapsulated exception ------------\
java.lang.NoSuchMethodException:
com.afs.entity.ContactLead.setIncome([Ljava.lang.String;)
        at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1226)
        at ognl.OgnlRuntime.setMethodValue(OgnlRuntime.java:1474)
        at ognl.ObjectPropertyAccessor.setPossibleProperty(ObjectPropertyAccessor.java:85)
        at ognl.ObjectPropertyAccessor.setProperty(ObjectPropertyAccessor.java:162)
        at com.opensymphony.xwork2.ognl.accessor.ObjectAccessor.setProperty(ObjectAccessor.java:27)
        at ognl.OgnlRuntime.setProperty(OgnlRuntime.java:2245)
        at ognl.ASTProperty.setValueBody(ASTProperty.java:127)
        at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:220)
        at ognl.SimpleNode.setValue(SimpleNode.java:301)
        at ognl.ASTChain.setValueBody(ASTChain.java:227)
        at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:220)
        at ognl.SimpleNode.setValue(SimpleNode.java:301)
        at ognl.Ognl.setValue(Ognl.java:737)
        at com.opensymphony.xwork2.ognl.OgnlUtil.setValue(OgnlUtil.java:209)
        at com.opensymphony.xwork2.ognl.OgnlValueStack.trySetValue(OgnlValueStack.java:173)
        at com.opensymphony.xwork2.ognl.OgnlValueStack.setValue(OgnlValueStack.java:160)
        at com.opensymphony.xwork2.ognl.OgnlValueStack.setValue(OgnlValueStack.java:151)
        at com.opensymphony.xwork2.interceptor.ParametersInterceptor.setParameters(ParametersInterceptor.java:288)
        at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:199)
        at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
        at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
        at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
        at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:190)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
        at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
        at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
        at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
        at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
        at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
        at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
        at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:142)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
        at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:166)
        at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
        at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
        at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
        at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:190)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
        at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
        at com.afs.web.interceptor.SessionInterceptor.intercept(SessionInterceptor.java:57)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
        at com.afs.web.interceptor.NoCacheInterceptor.intercept(NoCacheInterceptor.java:31)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
        at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
        at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:485)
        at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
        at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
        at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:368)
        at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109)
        at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
        at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:97)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
        at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:100)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
        at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:78)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
        at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:119)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
        at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
        at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:35)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
        at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:187)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
        at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
        at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
        at org.springframework.security.web.session.ConcurrentSessionFilter.doFilter(ConcurrentSessionFilter.java:109)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
        at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:169)
        at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
        at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
        at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
        at org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:113)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
        at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
        at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360)
        at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
        at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
        at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:726)
        at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
        at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:206)
        at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
        at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
        at org.mortbay.jetty.Server.handle(Server.java:324)
        at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
        at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:828)
        at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:514)
        at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
        at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
        at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
        at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:450)
\--------------------------------------/
Dec 10, 14:41:55 (CommonsLogger.java:56)
WARN : The first TextProvider in the ValueStack
(com.afs.web.action.contact.ContactCreateAction) could not locate the
message resource with key 'contact.contactLead.income'
Dec 10, 14:41:55 (CommonsLogger.java:56)
WARN : The default value expression 'contact.contactLead.income'
evaluated to '$123'

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


Re: [S2.2.1] Struts Type Converter for "sub-model" objects not working?

Posted by st...@gmail.com.
You need to determine why contact.contactLead.income is being evaluated
as $123.  This is forcing the search for setIncome(String).  Is the user
entering this value?  If so, you need to strip it of the "String" so it can
be considered a BigDecimal.

On Sat, Dec 11, 2010 at 6:51 PM, Burton Rhodes <bu...@gmail.com>wrote:

> I know. I don't have a setIncome(String) method. But I do have
> setIncome(BigDecimal) method , hence the type conversion. Normally the
> class MyCurrencyCoverter will covert the String to BigDecimal, but
> it's never called. I am wondering what I am doing wrong that the
> conversion class is not called.
>
> On Saturday, December 11, 2010,  <st...@gmail.com> wrote:
> > Look at the bottom of your message and also the top.
> > 'contact.contactLead.income' evaluated
> > to '$123' and you do not have a method
> > com.afs.entity.ContactLead.setIncome([Ljava.lang.String;)]
> >
> > Scott
> >
> > On Fri, Dec 10, 2010 at 2:53 PM, Burton Rhodes <burtonrhodes@gmail.com
> >wrote:
> >
> >> I am having issues trying to get a Type Converter to run when
> >> converting a field that is a "sub-object" of the main model.  For
> >> example, I have a Contact class that contains a ContactLead class.  I
> >> have an Action class that saves a new Contact and ContactLead at the
> >> same time.  Originally, I set up my
> >> ContactCreateAction-conversion.properties file to convert the
> >> "contact.contactLead.income"  field (three levels deep).  However,
> >> MyCurrencyConverter class never gets called.  I then changed my Action
> >> and Jsp pages to have seperate Contact and ContactLead objects and
> >> changed the conversion.properties file to convert
> >> "contactLead.income".  In this case, MyCurrencyConverter is called and
> >> everything works fine.
> >>
> >> Although everything is fine, shouldn't the conversion be recursive?
> >> Is this supposed to work, and I'm doing something wrong?  I have tried
> >> it both ways several times to make sure I didn't just mess something
> >> up, but each time I'm getting the same result.  Any comments welcome.
> >>
> >> Below are code snippets only.
> >>
> >> ***  DOES NOT WORK ***
> >> ContactCreateAction-conversion.properties:
> >> contact.contactLead.income=com.afs.web.converter.MyCurrencyConverter
> >>
> >> Jsp File:
> >> <s:textfield name="contact.contactLead.income"
> >> value="%{getText('format.money',{contact.contactLead.income != null ?
> >> contact.contactLead.income :''})}"  />
> >>
> >> ***  DOES WORK ***
> >> ContactCreateAction-conversion.properties:
> >> contactLead.income=com.afs.web.converter.MyCurrencyConverter
> >>
> >> Jsp File:
> >> <s:textfield name="contactLead.income"
> >> value="%{getText('format.money',{contactLead.income != null ?
> >> contactLead.income :''})}"  />
> >>
> >> **** The Contact Class ****
> >> // Most code ommitted
> >> public class Contact implements Serializable {
> >>
> >>        @Id
> >>        @GeneratedValue
> >>        @Column(name = "ContactId")
> >>        private Integer contactId;
> >>
> >>        @OneToOne(cascade = { CascadeType.ALL }, fetch=FetchType.LAZY)
> >>        @JoinColumn(name="ContactLeadId")
> >>        private ContactLead contactLead;
> >>
> >>            .......  More veriables and getters/setters below
> >> }
> >>
> >> *** THE ERROR ***
> >> Dec 10, 14:41:49 (CommonsLogger.java:56)
> >> WARN : The first TextProvider in the ValueStack
> >> (com.afs.web.action.contact.ContactCreateAction) could not locate the
> >> message resource with key 'contact.contactLead.income'
> >> Dec 10, 14:41:49 (CommonsLogger.java:56)
> >> WARN : The default value expression 'contact.contactLead.income' was
> >> evaluated and did not match a property.  The literal value
> >> 'contact.contactLead.income' will be used.
> >> Dec 10, 14:41:49 (CommonsLogger.java:56)
> >> WARN : The first TextProvider in the ValueStack
> >> (com.afs.web.action.contact.ContactCreateAction) could not locate the
> >> message resource with key 'contact.contactLead.nextStepDate'
> >> Dec 10, 14:41:50 (CommonsLogger.java:56)
> >> WARN : The default value expression 'contact.contactLead.nextStepDate'
> >> was evaluated and did not match a property.  The literal value
> >> 'contact.contactLead.nextStepDate' will be used.
> >> Dec 10, 14:41:55 (CommonsLogger.java:60)
> >> WARN : Error setting expression 'contact.contactLead.income' with
> >> value '[Ljava.lang.String;@1fbc2c7'
> >> ognl.MethodFailedException: Method "setIncome" failed for object
> >> com.afs.entity.ContactLead@16e1c2c [java.lang.NoSuchMethodException:
> >> com.afs.entity.ContactLead.setIncome([Ljava.lang.String;)]
> >>        at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1285)
> >>        at ognl.OgnlRuntime.setMethodValue(OgnlRuntime.java:1474)
> >>        at
> >>
> ognl.ObjectPropertyAccessor.setPossibleProperty(ObjectPropertyAccessor.java:85)
> >>        at
> >> ognl.ObjectPropertyAccessor.setProperty(ObjectPropertyAccessor.java:162)
> >> > ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> >> For additional commands, e-mail: user-help@struts.apache.org
> >>
> >>
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> For additional commands, e-mail: user-help@struts.apache.org
>
>

Re: [S2.2.1] Struts Type Converter for "sub-model" objects not working?

Posted by Lukasz Lenart <lu...@googlemail.com>.
Did you try to user annotation @TypeConversion ?


Regards
-- 
Łukasz
+ 48 606 323 122 http://www.lenart.org.pl/
Kapituła Javarsovia http://javarsovia.pl

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


Re: [S2.2.1] Struts Type Converter for "sub-model" objects not working?

Posted by Burton Rhodes <bu...@gmail.com>.
Thanks guys for your reponses, but I think I may have been unclear in
my question.  I have a class called MyCurrencyConverter that converts
a string to a BigDecimal by stripping the "$", commas, etc. - this
works fine.  The problem arises when struts does not call
MyCurrencyConverter for the nested class "Contact -> ContactLead"
("Contact" class has a member variable "ContactLead" class all with
getters/setters).

For the code below, the first field converts just fine and I can track
this in my debugger.  But for the second field, MyCurrencyConverter is
never called by Struts.  I am wondering if this is a bug.  I would
have thought Struts would be smart enough to map the nested
ContactLead class to the conversion.properties file.

JSP snippet:
<!-- First Field: Works fine, MyCurrencyConverter is called -->
<s:textfield key="contactLead.income"
value="%{getText('format.money',{contactLead.income != null ?
contactLead.income :''})}"  />
<!-- Second Field: MyCurrencyConveter is never called for this textfield -->
<s:textfield key="contact.contactLead.income"
value="%{getText('format.money',{contact.contactLead.income != null ?
contact.contactLead.income :''})}"  />

ContactCreateAction-conversion.properties:
contactLead.income=com.afs.web.converter.MyCurrencyConverter
contact.contactLead.income=com.afs.web.converter.MyCurrencyConverter

Thanks,
Burton

On Mon, Dec 13, 2010 at 1:09 AM, Lukasz Lenart
<lu...@googlemail.com> wrote:
> 2010/12/12 Burton Rhodes <bu...@gmail.com>:
>> I know. I don't have a setIncome(String) method. But I do have
>> setIncome(BigDecimal) method , hence the type conversion. Normally the
>> class MyCurrencyCoverter will covert the String to BigDecimal, but
>> it's never called. I am wondering what I am doing wrong that the
>> conversion class is not called.
>
> String to BigDecimal conversion is built-in functionality and looks
> like your user is entering $ at the beginning of the field Income
> that's why Sturts falling with conversion.
>
> The current converter treats an input string as whole, there is no
> parsing to extract numbers, you write your own and assign it to all
> BigDecimal types
> http://struts.apache.org/2.x/docs/type-conversion.html#TypeConversion-ApplyingaTypeConverterforanapplication
>
>
> Regards
> --
> Łukasz
> + 48 606 323 122 http://www.lenart.org.pl/
> Kapituła Javarsovia 2010 http://javarsovia.pl
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> For additional commands, e-mail: user-help@struts.apache.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


Re: [S2.2.1] Struts Type Converter for "sub-model" objects not working?

Posted by Lukasz Lenart <lu...@googlemail.com>.
2010/12/12 Burton Rhodes <bu...@gmail.com>:
> I know. I don't have a setIncome(String) method. But I do have
> setIncome(BigDecimal) method , hence the type conversion. Normally the
> class MyCurrencyCoverter will covert the String to BigDecimal, but
> it's never called. I am wondering what I am doing wrong that the
> conversion class is not called.

String to BigDecimal conversion is built-in functionality and looks
like your user is entering $ at the beginning of the field Income
that's why Sturts falling with conversion.

The current converter treats an input string as whole, there is no
parsing to extract numbers, you write your own and assign it to all
BigDecimal types
http://struts.apache.org/2.x/docs/type-conversion.html#TypeConversion-ApplyingaTypeConverterforanapplication


Regards
-- 
Łukasz
+ 48 606 323 122 http://www.lenart.org.pl/
Kapituła Javarsovia 2010 http://javarsovia.pl

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


Re: [S2.2.1] Struts Type Converter for "sub-model" objects not working?

Posted by Burton Rhodes <bu...@gmail.com>.
I know. I don't have a setIncome(String) method. But I do have
setIncome(BigDecimal) method , hence the type conversion. Normally the
class MyCurrencyCoverter will covert the String to BigDecimal, but
it's never called. I am wondering what I am doing wrong that the
conversion class is not called.

On Saturday, December 11, 2010,  <st...@gmail.com> wrote:
> Look at the bottom of your message and also the top.
> 'contact.contactLead.income' evaluated
> to '$123' and you do not have a method
> com.afs.entity.ContactLead.setIncome([Ljava.lang.String;)]
>
> Scott
>
> On Fri, Dec 10, 2010 at 2:53 PM, Burton Rhodes <bu...@gmail.com>wrote:
>
>> I am having issues trying to get a Type Converter to run when
>> converting a field that is a "sub-object" of the main model.  For
>> example, I have a Contact class that contains a ContactLead class.  I
>> have an Action class that saves a new Contact and ContactLead at the
>> same time.  Originally, I set up my
>> ContactCreateAction-conversion.properties file to convert the
>> "contact.contactLead.income"  field (three levels deep).  However,
>> MyCurrencyConverter class never gets called.  I then changed my Action
>> and Jsp pages to have seperate Contact and ContactLead objects and
>> changed the conversion.properties file to convert
>> "contactLead.income".  In this case, MyCurrencyConverter is called and
>> everything works fine.
>>
>> Although everything is fine, shouldn't the conversion be recursive?
>> Is this supposed to work, and I'm doing something wrong?  I have tried
>> it both ways several times to make sure I didn't just mess something
>> up, but each time I'm getting the same result.  Any comments welcome.
>>
>> Below are code snippets only.
>>
>> ***  DOES NOT WORK ***
>> ContactCreateAction-conversion.properties:
>> contact.contactLead.income=com.afs.web.converter.MyCurrencyConverter
>>
>> Jsp File:
>> <s:textfield name="contact.contactLead.income"
>> value="%{getText('format.money',{contact.contactLead.income != null ?
>> contact.contactLead.income :''})}"  />
>>
>> ***  DOES WORK ***
>> ContactCreateAction-conversion.properties:
>> contactLead.income=com.afs.web.converter.MyCurrencyConverter
>>
>> Jsp File:
>> <s:textfield name="contactLead.income"
>> value="%{getText('format.money',{contactLead.income != null ?
>> contactLead.income :''})}"  />
>>
>> **** The Contact Class ****
>> // Most code ommitted
>> public class Contact implements Serializable {
>>
>>        @Id
>>        @GeneratedValue
>>        @Column(name = "ContactId")
>>        private Integer contactId;
>>
>>        @OneToOne(cascade = { CascadeType.ALL }, fetch=FetchType.LAZY)
>>        @JoinColumn(name="ContactLeadId")
>>        private ContactLead contactLead;
>>
>>            .......  More veriables and getters/setters below
>> }
>>
>> *** THE ERROR ***
>> Dec 10, 14:41:49 (CommonsLogger.java:56)
>> WARN : The first TextProvider in the ValueStack
>> (com.afs.web.action.contact.ContactCreateAction) could not locate the
>> message resource with key 'contact.contactLead.income'
>> Dec 10, 14:41:49 (CommonsLogger.java:56)
>> WARN : The default value expression 'contact.contactLead.income' was
>> evaluated and did not match a property.  The literal value
>> 'contact.contactLead.income' will be used.
>> Dec 10, 14:41:49 (CommonsLogger.java:56)
>> WARN : The first TextProvider in the ValueStack
>> (com.afs.web.action.contact.ContactCreateAction) could not locate the
>> message resource with key 'contact.contactLead.nextStepDate'
>> Dec 10, 14:41:50 (CommonsLogger.java:56)
>> WARN : The default value expression 'contact.contactLead.nextStepDate'
>> was evaluated and did not match a property.  The literal value
>> 'contact.contactLead.nextStepDate' will be used.
>> Dec 10, 14:41:55 (CommonsLogger.java:60)
>> WARN : Error setting expression 'contact.contactLead.income' with
>> value '[Ljava.lang.String;@1fbc2c7'
>> ognl.MethodFailedException: Method "setIncome" failed for object
>> com.afs.entity.ContactLead@16e1c2c [java.lang.NoSuchMethodException:
>> com.afs.entity.ContactLead.setIncome([Ljava.lang.String;)]
>>        at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1285)
>>        at ognl.OgnlRuntime.setMethodValue(OgnlRuntime.java:1474)
>>        at
>> ognl.ObjectPropertyAccessor.setPossibleProperty(ObjectPropertyAccessor.java:85)
>>        at
>> ognl.ObjectPropertyAccessor.setProperty(ObjectPropertyAccessor.java:162)
>> > ---------------------------------------------------------------------
>> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>> For additional commands, e-mail: user-help@struts.apache.org
>>
>>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


Re: [S2.2.1] Struts Type Converter for "sub-model" objects not working?

Posted by st...@gmail.com.
Look at the bottom of your message and also the top.
'contact.contactLead.income' evaluated
to '$123' and you do not have a method
com.afs.entity.ContactLead.setIncome([Ljava.lang.String;)]

Scott

On Fri, Dec 10, 2010 at 2:53 PM, Burton Rhodes <bu...@gmail.com>wrote:

> I am having issues trying to get a Type Converter to run when
> converting a field that is a "sub-object" of the main model.  For
> example, I have a Contact class that contains a ContactLead class.  I
> have an Action class that saves a new Contact and ContactLead at the
> same time.  Originally, I set up my
> ContactCreateAction-conversion.properties file to convert the
> "contact.contactLead.income"  field (three levels deep).  However,
> MyCurrencyConverter class never gets called.  I then changed my Action
> and Jsp pages to have seperate Contact and ContactLead objects and
> changed the conversion.properties file to convert
> "contactLead.income".  In this case, MyCurrencyConverter is called and
> everything works fine.
>
> Although everything is fine, shouldn't the conversion be recursive?
> Is this supposed to work, and I'm doing something wrong?  I have tried
> it both ways several times to make sure I didn't just mess something
> up, but each time I'm getting the same result.  Any comments welcome.
>
> Below are code snippets only.
>
> ***  DOES NOT WORK ***
> ContactCreateAction-conversion.properties:
> contact.contactLead.income=com.afs.web.converter.MyCurrencyConverter
>
> Jsp File:
> <s:textfield name="contact.contactLead.income"
> value="%{getText('format.money',{contact.contactLead.income != null ?
> contact.contactLead.income :''})}"  />
>
> ***  DOES WORK ***
> ContactCreateAction-conversion.properties:
> contactLead.income=com.afs.web.converter.MyCurrencyConverter
>
> Jsp File:
> <s:textfield name="contactLead.income"
> value="%{getText('format.money',{contactLead.income != null ?
> contactLead.income :''})}"  />
>
> **** The Contact Class ****
> // Most code ommitted
> public class Contact implements Serializable {
>
>        @Id
>        @GeneratedValue
>        @Column(name = "ContactId")
>        private Integer contactId;
>
>        @OneToOne(cascade = { CascadeType.ALL }, fetch=FetchType.LAZY)
>        @JoinColumn(name="ContactLeadId")
>        private ContactLead contactLead;
>
>            .......  More veriables and getters/setters below
> }
>
> *** THE ERROR ***
> Dec 10, 14:41:49 (CommonsLogger.java:56)
> WARN : The first TextProvider in the ValueStack
> (com.afs.web.action.contact.ContactCreateAction) could not locate the
> message resource with key 'contact.contactLead.income'
> Dec 10, 14:41:49 (CommonsLogger.java:56)
> WARN : The default value expression 'contact.contactLead.income' was
> evaluated and did not match a property.  The literal value
> 'contact.contactLead.income' will be used.
> Dec 10, 14:41:49 (CommonsLogger.java:56)
> WARN : The first TextProvider in the ValueStack
> (com.afs.web.action.contact.ContactCreateAction) could not locate the
> message resource with key 'contact.contactLead.nextStepDate'
> Dec 10, 14:41:50 (CommonsLogger.java:56)
> WARN : The default value expression 'contact.contactLead.nextStepDate'
> was evaluated and did not match a property.  The literal value
> 'contact.contactLead.nextStepDate' will be used.
> Dec 10, 14:41:55 (CommonsLogger.java:60)
> WARN : Error setting expression 'contact.contactLead.income' with
> value '[Ljava.lang.String;@1fbc2c7'
> ognl.MethodFailedException: Method "setIncome" failed for object
> com.afs.entity.ContactLead@16e1c2c [java.lang.NoSuchMethodException:
> com.afs.entity.ContactLead.setIncome([Ljava.lang.String;)]
>        at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1285)
>        at ognl.OgnlRuntime.setMethodValue(OgnlRuntime.java:1474)
>        at
> ognl.ObjectPropertyAccessor.setPossibleProperty(ObjectPropertyAccessor.java:85)
>        at
> ognl.ObjectPropertyAccessor.setProperty(ObjectPropertyAccessor.java:162)
>        at
> com.opensymphony.xwork2.ognl.accessor.ObjectAccessor.setProperty(ObjectAccessor.java:27)
>        at ognl.OgnlRuntime.setProperty(OgnlRuntime.java:2245)
>        at ognl.ASTProperty.setValueBody(ASTProperty.java:127)
>        at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:220)
>        at ognl.SimpleNode.setValue(SimpleNode.java:301)
>        at ognl.ASTChain.setValueBody(ASTChain.java:227)
>        at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:220)
>        at ognl.SimpleNode.setValue(SimpleNode.java:301)
>        at ognl.Ognl.setValue(Ognl.java:737)
>        at com.opensymphony.xwork2.ognl.OgnlUtil.setValue(OgnlUtil.java:209)
>        at
> com.opensymphony.xwork2.ognl.OgnlValueStack.trySetValue(OgnlValueStack.java:173)
>        at
> com.opensymphony.xwork2.ognl.OgnlValueStack.setValue(OgnlValueStack.java:160)
>        at
> com.opensymphony.xwork2.ognl.OgnlValueStack.setValue(OgnlValueStack.java:151)
>        at
> com.opensymphony.xwork2.interceptor.ParametersInterceptor.setParameters(ParametersInterceptor.java:288)
>        at
> com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:199)
>        at
> com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
>        at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
>        at
> com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
>        at
> com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
>        at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
>        at
> com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:190)
>        at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
>        at
> org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
>        at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
>        at
> org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
>        at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
>        at
> org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243)
>        at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
>        at
> com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
>        at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
>        at
> com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
>        at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
>        at
> org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
>        at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
>        at
> com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:142)
>        at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
>        at
> com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:166)
>        at
> com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
>        at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
>        at
> com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176)
>        at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
>        at
> org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
>        at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
>        at
> com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:190)
>        at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
>        at
> com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187)
>        at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
>        at
> com.afs.web.interceptor.SessionInterceptor.intercept(SessionInterceptor.java:57)
>        at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
>        at
> com.afs.web.interceptor.NoCacheInterceptor.intercept(NoCacheInterceptor.java:31)
>        at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
>        at
> org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
>        at
> org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:485)
>        at
> org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
>        at
> org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
>        at
> org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
>        at
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:368)
>        at
> org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109)
>        at
> org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
>        at
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
>        at
> org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:97)
>        at
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
>        at
> org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:100)
>        at
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
>        at
> org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:78)
>        at
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
>        at
> org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:119)
>        at
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
>        at
> org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)
>        at
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
>        at
> org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:35)
>        at
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
>        at
> org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:187)
>        at
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
>        at
> org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
>        at
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
>        at
> org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79)
>        at
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
>        at
> org.springframework.security.web.session.ConcurrentSessionFilter.doFilter(ConcurrentSessionFilter.java:109)
>        at
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
>        at
> org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:169)
>        at
> org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
>        at
> org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
>        at
> org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
>        at
> org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:113)
>        at
> org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
>        at
> org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
>        at
> org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360)
>        at
> org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
>        at
> org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
>        at
> org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:726)
>        at
> org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
>        at
> org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:206)
>        at
> org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
>        at
> org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
>        at org.mortbay.jetty.Server.handle(Server.java:324)
>        at
> org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
>        at
> org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:828)
>        at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:514)
>        at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
>        at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
>        at
> org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
>        at
> org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:450)
> Caused by: java.lang.NoSuchMethodException:
> com.afs.entity.ContactLead.setIncome([Ljava.lang.String;)
>        at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1226)
>        ... 106 more
> /-- Encapsulated exception ------------\
> java.lang.NoSuchMethodException:
> com.afs.entity.ContactLead.setIncome([Ljava.lang.String;)
>        at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1226)
>        at ognl.OgnlRuntime.setMethodValue(OgnlRuntime.java:1474)
>        at
> ognl.ObjectPropertyAccessor.setPossibleProperty(ObjectPropertyAccessor.java:85)
>        at
> ognl.ObjectPropertyAccessor.setProperty(ObjectPropertyAccessor.java:162)
>        at
> com.opensymphony.xwork2.ognl.accessor.ObjectAccessor.setProperty(ObjectAccessor.java:27)
>        at ognl.OgnlRuntime.setProperty(OgnlRuntime.java:2245)
>        at ognl.ASTProperty.setValueBody(ASTProperty.java:127)
>        at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:220)
>        at ognl.SimpleNode.setValue(SimpleNode.java:301)
>        at ognl.ASTChain.setValueBody(ASTChain.java:227)
>        at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:220)
>        at ognl.SimpleNode.setValue(SimpleNode.java:301)
>        at ognl.Ognl.setValue(Ognl.java:737)
>        at com.opensymphony.xwork2.ognl.OgnlUtil.setValue(OgnlUtil.java:209)
>        at
> com.opensymphony.xwork2.ognl.OgnlValueStack.trySetValue(OgnlValueStack.java:173)
>        at
> com.opensymphony.xwork2.ognl.OgnlValueStack.setValue(OgnlValueStack.java:160)
>        at
> com.opensymphony.xwork2.ognl.OgnlValueStack.setValue(OgnlValueStack.java:151)
>        at
> com.opensymphony.xwork2.interceptor.ParametersInterceptor.setParameters(ParametersInterceptor.java:288)
>        at
> com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:199)
>        at
> com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
>        at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
>        at
> com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
>        at
> com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
>        at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
>        at
> com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:190)
>        at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
>        at
> org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
>        at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
>        at
> org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
>        at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
>        at
> org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243)
>        at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
>        at
> com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
>        at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
>        at
> com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
>        at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
>        at
> org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
>        at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
>        at
> com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:142)
>        at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
>        at
> com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:166)
>        at
> com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
>        at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
>        at
> com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176)
>        at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
>        at
> org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
>        at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
>        at
> com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:190)
>        at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
>        at
> com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187)
>        at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
>        at
> com.afs.web.interceptor.SessionInterceptor.intercept(SessionInterceptor.java:57)
>        at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
>        at
> com.afs.web.interceptor.NoCacheInterceptor.intercept(NoCacheInterceptor.java:31)
>        at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
>        at
> org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
>        at
> org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:485)
>        at
> org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
>        at
> org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
>        at
> org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
>        at
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:368)
>        at
> org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109)
>        at
> org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
>        at
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
>        at
> org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:97)
>        at
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
>        at
> org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:100)
>        at
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
>        at
> org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:78)
>        at
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
>        at
> org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:119)
>        at
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
>        at
> org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)
>        at
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
>        at
> org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:35)
>        at
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
>        at
> org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:187)
>        at
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
>        at
> org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
>        at
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
>        at
> org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79)
>        at
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
>        at
> org.springframework.security.web.session.ConcurrentSessionFilter.doFilter(ConcurrentSessionFilter.java:109)
>        at
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
>        at
> org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:169)
>        at
> org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
>        at
> org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
>        at
> org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
>        at
> org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:113)
>        at
> org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
>        at
> org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
>        at
> org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360)
>        at
> org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
>        at
> org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
>        at
> org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:726)
>        at
> org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
>        at
> org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:206)
>        at
> org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
>        at
> org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
>        at org.mortbay.jetty.Server.handle(Server.java:324)
>        at
> org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
>        at
> org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:828)
>        at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:514)
>        at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
>        at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
>        at
> org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
>        at
> org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:450)
> \--------------------------------------/
> Dec 10, 14:41:55 (CommonsLogger.java:56)
> WARN : The first TextProvider in the ValueStack
> (com.afs.web.action.contact.ContactCreateAction) could not locate the
> message resource with key 'contact.contactLead.income'
> Dec 10, 14:41:55 (CommonsLogger.java:56)
> WARN : The default value expression 'contact.contactLead.income'
> evaluated to '$123'
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> For additional commands, e-mail: user-help@struts.apache.org
>
>