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的主要内容,如果未能解决你的问题,请参考以下文章