org.springframework.expression.spel.SpelEvaluationException: EL1004E:(pos 15):Method call: Method ge
Posted
技术标签:
【中文标题】org.springframework.expression.spel.SpelEvaluationException: EL1004E:(pos 15):Method call: Method getId() can not be found on java.util.ArrayList type【英文标题】:org.springframework.expression.spel.SpelEvaluationException: EL1004E:(pos 15):Method call: Method getId() cannot be found on java.util.ArrayList type 【发布时间】:2014-07-21 01:25:10 【问题描述】:我需要帮助来修复这个错误,首先我想获取所有命令,然后当我选择一个命令时,我应该获得有关所选命令的更多详细信息。
BaseEntity.java
@MappedSuperclass
public class BaseEntity implements Serializable
@Id
@GeneratedValue
private Long id;
public Long getId()
return id;
public void setId( Long id )
this.id = id;
Command.java
@Entity
@Table( name = "cmd" )
public class Command extends BaseEntity
String private name;
//getter&setter
CommandDao.java
public Command loadById( Long id )
Assert.notNull( id );
Command cmd = null;
Query query = getEntityManger().createQuery( "select u from "
+ getPersistentClass().getSimpleName()
+ " u where u.id= :id" ).setParameter( "id", id );
try
cmd = (Command) query.getSingleResult();
catch ( NoResultException e )
return cmd;
@Override
@Transactional( readOnly = true )
public List<Command> listeCmd()
Query query = getEntityManger().createQuery( "from " + getPersistentClass().getSimpleName() );
List<Command> cmd = (List) query.getResultList();
return cmd;
CommandServiceImpl.java
private CommandDao commandDao;
public List<Command> list()
return commandDao.listeCmd();
public Command cmdPick( Long id )
List<Command> l = Command Dao.listeCmd();
Command cmd = null;
for ( int i = 0; i < l.size(); i++ )
if ( l.get( i ).getId() == id )
cmd = commandDao.loadById( id );
return cmd;
applicationContext.xml
<bean id="commandDao" class="xx.xx.xx.CommandDao" />
<!-- Services Declaration -->
<bean id="commandService" class="xx.xx.xx.CommandServiceImpl">
<property name="commandDao" ref="commandDao" /></property>
</bean>
流.xml
<var name="command" class="xx.xx.xx.Command" />
<view-state id="shwo" view="show.xhtml" model="command">
<on-render>
<evaluate expression="commandService.liste()" result="viewScope.list"/>
</on-render>
<transition on="pick">
<evaluate expression="commandService.cmdPick(command.getId())"
result="flowScope.list" />
</transition>
</view-state>
显示.xhtml
<h:form>
<p:dataTable var="car" value="#list">
<p:column>
<h:outputText value="#car.name" />
<h:commandLink action="pick" value="#car.id"/>
</p:column>
</p:dataTable>
</h:form>
错误
12:57:22,883 DEBUG ActionExecutor:49 - 正在执行 [EvaluateAction@1360f6d 表达式 = commandService.commandService.cmdPick(command.getId()), resultExpression = flowScope.command] 12:57:22,883 调试 AnnotatedAction:142 - 放置动作执行属性映射 [[empty]] 12:57:22,884 DEBUG AnnotatedAction:149 - 清除动作执行属性映射 [[empty]] 12:57:22,886 调试 FlowExecutionImpl:590 - 尝试处理 [org.springframework.webflow.execution.ActionExecutionException:执行 [AnnotatedAction@127eb1c targetAction = [EvaluateAction@1360f6d 表达式 = commandService.commandService.cmdPick(command.getId() ), resultExpression = flowScope.command], attributes = map[[empty]]] in state 'show' of flow 'main' -- 动作执行属性是 'map[[empty]]'] 根本原因 [org.springframework .expression.spel.SpelEvaluationException: EL1004E:(pos 15): Method call: Method getId() can not be found on java.util.ArrayList type] 12:57:22,886 DEBUG FlowExecutionImpl:611 - 重新抛出未处理的流执行异常 12:57:22,887 调试 SessionBindingConversationManager:99 - 解锁对话 1 2014 年 5 月 31 日下午 12:57:22 org.apache.catalina.core.StandardWrapperValve 调用 GRAVE:servlet [Spring MVC Dispatcher Servlet] 的 Servlet.service() 在路径 [/Colocation] 的上下文中抛出异常 [请求处理失败;嵌套异常是 org.springframework.webflow.execution.ActionExecutionException: 异常抛出执行 [AnnotatedAction@127eb1c targetAction = [EvaluateAction@1360f6d expression = commandService.commandService.cmdPick(command.getId()), resultExpression = flowScope.command], attributes = map[[empty]]] in state 'show' of flow 'main' -- 动作执行属性是 'map[[empty]]'] 有根本原因 org.springframework.expression.spel.SpelEvaluationException: EL1004E:(pos 15): Method call: Method getId() can not be found on java.util.ArrayList type 在 org.springframework.expression.spel.ast.MethodReference.findAccessorForMethod(MethodReference.java:182) 在 org.springframework.expression.spel.ast.MethodReference.getValueInternal(MethodReference.java:106) 在 org.springframework.expression.spel.ast.CompoundExpression.getValueInternal(CompoundExpression.java:57) 在 org.springframework.expression.spel.ast.MethodReference.getValueInternal(MethodReference.java:65) 在 org.springframework.expression.spel.ast.CompoundExpression.getValueInternal(CompoundExpression.java:57) 在 org.springframework.expression.spel.ast.SpelNodeImpl.getTypedValue(SpelNodeImpl.java:102) 在 org.springframework.expression.spel.standard.SpelExpression.getValue(SpelExpression.java:97) 在 org.springframework.binding.expression.spel.SpringELExpression.getValue(SpringELExpression.java:84) 在 org.springframework.webflow.action.EvaluateAction.doExecute(EvaluateAction.java:75) 在 org.springframework.webflow.action.AbstractAction.execute(AbstractAction.java:188) 在 org.springframework.webflow.execution.AnnotatedAction.execute(AnnotatedAction.java:145) 在 org.springframework.webflow.execution.ActionExecutor.execute(ActionExecutor.java:51) 在 org.springframework.webflow.engine.support.ActionTransitionCriteria.test(ActionTransitionCriteria.java:82) 在 org.springframework.webflow.engine.support.TransitionCriteriaChain.test(TransitionCriteriaChain.java:71) 在 org.springframework.webflow.engine.Transition.canExecute(Transition.java:195) 在 org.springframework.webflow.engine.Transition.execute(Transition.java:211) 在 org.springframework.webflow.engine.impl.FlowExecutionImpl.execute(FlowExecutionImpl.java:393) 在 org.springframework.webflow.engine.impl.RequestControlContextImpl.execute(RequestControlContextImpl.java:214) 在 org.springframework.webflow.engine.TransitionableState.handleEvent(TransitionableState.java:119) 在 org.springframework.webflow.engine.Flow.handleEvent(Flow.java:555) 在 org.springframework.webflow.engine.impl.FlowExecutionImpl.handleEvent(FlowExecutionImpl.java:388) 在 org.springframework.webflow.engine.impl.RequestControlContextImpl.handleEvent(RequestControlContextImpl.java:210) 在 org.springframework.webflow.engine.ViewState.handleEvent(ViewState.java:232) 在 org.springframework.webflow.engine.ViewState.resume(ViewState.java:196) 在 org.springframework.webflow.engine.Flow.resume(Flow.java:545) 在 org.springframework.webflow.engine.impl.FlowExecutionImpl.resume(FlowExecutionImpl.java:258) 在 org.springframework.webflow.executor.FlowExecutorImpl.resumeExecution(FlowExecutorImpl.java:169) 在 org.springframework.webflow.mvc.servlet.FlowHandlerAdapter.handle(FlowHandlerAdapter.java:183) 在 org.springframework.faces.webflow.JsfFlowHandlerAdapter.handle(JsfFlowHandlerAdapter.java:48) 在 org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923) 在 org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852) 在 org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882) 在 org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:646) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:727) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 在 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 在 org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118) 在 org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 在 org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 在 org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 在 org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 在 org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 在 org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 在 org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:150) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 在 org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:183) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 在 org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 在 org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 在 org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192) 在 org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160) 在 org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) 在 org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 在 org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) 在 org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 在 org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040) 在 org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607) 在 org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:315) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 在 java.lang.Thread.run(Thread.java:744)
【问题讨论】:
尝试显示有关 StackTrace 的更多信息 问题是commandService.liste()
返回一个列表,但您没有将其用作列表,因为您在其上调用 command.getId()
。您可能想要遍历列表并在每个元素上调用方法
【参考方案1】:
您将表单的模型指定为命令,视图范围变量也指定为渲染命令。将此 viewscope 变量更改为 commandList 并在视图中进行相应的更改。然后在 commandLink 中编写一个 javascript onclick 函数来捕获用户选择的 id 并在 Command 中为其分配一个字段。假设这个字段在模型命令中定义为 selectedId。将此值传递给评估表达式中的 cmdPick 方法。
【讨论】:
我的意思是将 viewscope 变量的字面名称更改为不与视图的模型名称冲突。顺便说一句,我在您的服务中看不到“commandList”。 我编辑了我的出版物,你能告诉我它是否正确吗?关于viewScope 是的,很好。始终为范围变量提供唯一名称。现在就写个js函数试试吧。 抱歉 Prasad 的问题,但您能否详细介绍一下您的解释中的第二部分 你有命令列表。您想从中选择一个 id。因此,在命令实体中,通过名称 selectedId 创建一个瞬态字段,并使用 JavaScript onclick 函数将该字段设置为选定的 id。不幸的是,我现在无法使用计算机。以上是关于org.springframework.expression.spel.SpelEvaluationException: EL1004E:(pos 15):Method call: Method ge的主要内容,如果未能解决你的问题,请参考以下文章