title: Thymeleaf drop-down menu from ENUM: EL1043E: Unexpected token. Expected 'rparen())' but was 'lparen(()'
body: <p>I'm getting an error when attempting to populate a dropdown menu in HTML with a Thymeleaf ENUM. I'm not sure what the problem is:</p>
  
  <pre><code>&lt;select&gt;
  &lt;option th:each="complexity : ${T(cz.test.sc.entity.common.Complexity.values()}"
          th:value="${complexity}"
          th:text="${complexity}"&gt;
  &lt;/option&gt;
  &lt;/select&gt;
  </code></pre>
  
  <p><strong>ENUM:</strong></p>
  
  <pre><code>public enum Complexity {
      VERY_SIMPLE(1) {
          public String toString() {
              return "1. Very Simple";
          }
      },
      SIMPLE(2) {
          public String toString() {
              return "2. Simple";
          }
      },
      MEDIUM(3) {
          public String toString() {
              return "3. Medium";
          }
      },
      COMPLEX(4) {
          public String toString() {
              return "4. Complex";
          }
      },
      VERY_COMPLEX(5) {
          public String toString() {
              return "5. Very Complex";
          }
      };
  
      Complexity(int id) {
          EnumUtil.setEnumOrdinal(this, id);
      }
  }
  </code></pre>
  
  <p><strong>Exception:</strong></p>
  
  <pre><code>org.springframework.expression.spel.SpelParseException: Expression [T(cz.test.sc.entity.common.Complexity.values()] @44: EL1043E: Unexpected token. Expected 'rparen())' but was 'lparen(()'
      at org.springframework.expression.spel.standard.InternalSpelExpressionParser.raiseInternalException(InternalSpelExpressionParser.java:1006)
      at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatToken(InternalSpelExpressionParser.java:920)
      at org.springframework.expression.spel.standard.InternalSpelExpressionParser.maybeEatTypeReference(InternalSpelExpressionParser.java:584)
      at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatStartNode(InternalSpelExpressionParser.java:507)
      at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatPrimaryExpression(InternalSpelExpressionParser.java:344)
      at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatUnaryExpression(InternalSpelExpressionParser.java:338)
      at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatPowerIncDecExpression(InternalSpelExpressionParser.java:294)
      at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatProductExpression(InternalSpelExpressionParser.java:273)
      at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatSumExpression(InternalSpelExpressionParser.java:256)
      at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatRelationalExpression(InternalSpelExpressionParser.java:211)
      at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatLogicalAndExpression(InternalSpelExpressionParser.java:199)
      at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatLogicalOrExpression(InternalSpelExpressionParser.java:187)
      at org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatExpression(InternalSpelExpressionParser.java:147)
      at org.springframework.expression.spel.standard.InternalSpelExpressionParser.doParseExpression(InternalSpelExpressionParser.java:128)
      at org.springframework.expression.spel.standard.SpelExpressionParser.doParseExpression(SpelExpressionParser.java:60)
      at org.springframework.expression.spel.standard.SpelExpressionParser.doParseExpression(SpelExpressionParser.java:32)
      at org.springframework.expression.common.TemplateAwareExpressionParser.parseExpression(TemplateAwareExpressionParser.java:73)
      at org.springframework.expression.common.TemplateAwareExpressionParser.parseExpression(TemplateAwareExpressionParser.java:60)
      at org.thymeleaf.spring4.expression.SpelVariableExpressionEvaluator.getExpression(SpelVariableExpressionEvaluator.java:182)
      at org.thymeleaf.spring4.expression.SpelVariableExpressionEvaluator.evaluate(SpelVariableExpressionEvaluator.java:129)
      at org.thymeleaf.standard.expression.VariableExpression.executeVariable(VariableExpression.java:154)
      at org.thymeleaf.standard.expression.SimpleExpression.executeSimple(SimpleExpression.java:59)
      at org.thymeleaf.standard.expression.Expression.execute(Expression.java:103)
      at org.thymeleaf.standard.expression.Expression.execute(Expression.java:133)
      at org.thymeleaf.standard.expression.Expression.execute(Expression.java:120)
      at org.thymeleaf.standard.processor.attr.AbstractStandardIterationAttrProcessor.getIterationSpec(AbstractStandardIterationAttrProcessor.java:86)
      at org.thymeleaf.processor.attr.AbstractIterationAttrProcessor.processAttribute(AbstractIterationAttrProcessor.java:102)
      at org.thymeleaf.processor.attr.AbstractAttrProcessor.doProcess(AbstractAttrProcessor.java:87)
      at org.thymeleaf.processor.AbstractProcessor.process(AbstractProcessor.java:212)
      at org.thymeleaf.dom.Node.applyNextProcessor(Node.java:1017)
      at org.thymeleaf.dom.Node.processNode(Node.java:972)
      at org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:695)
      at org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:668)
      at org.thymeleaf.dom.Node.processNode(Node.java:990)
      at org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:695)
      at org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:668)
      at org.thymeleaf.dom.Node.processNode(Node.java:990)
      at org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:695)
      at org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:668)
      at org.thymeleaf.dom.Node.processNode(Node.java:990)
      at org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:695)
      at org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:668)
      at org.thymeleaf.dom.Node.processNode(Node.java:990)
      at org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:695)
      at org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:668)
      at org.thymeleaf.dom.Node.processNode(Node.java:990)
      at org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:695)
      at org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:668)
      at org.thymeleaf.dom.Node.processNode(Node.java:990)
      at org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:695)
      at org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:668)
      at org.thymeleaf.dom.Node.processNode(Node.java:990)
      at org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:695)
      at org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:668)
      at org.thymeleaf.dom.Node.processNode(Node.java:990)
      at org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:695)
      at org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:668)
      at org.thymeleaf.dom.Node.processNode(Node.java:990)
      at org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:695)
      at org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:668)
      at org.thymeleaf.dom.Node.processNode(Node.java:990)
      at org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:695)
      at org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:668)
      at org.thymeleaf.dom.Node.processNode(Node.java:990)
      at org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:695)
      at org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:668)
      at org.thymeleaf.dom.Node.processNode(Node.java:990)
      at org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:695)
      at org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:668)
      at org.thymeleaf.dom.Node.processNode(Node.java:990)
      at org.thymeleaf.dom.Document.process(Document.java:93)
      at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1155)
      at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1060)
      at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1011)
      at org.thymeleaf.spring4.view.ThymeleafView.renderFragment(ThymeleafView.java:335)
      at org.thymeleaf.spring4.view.ThymeleafView.render(ThymeleafView.java:190)
      at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1286)
      at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1041)
      at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:984)
      at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
      at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
      at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:635)
      at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
      at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
      at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:317)
      at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:127)
      at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91)
      at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
      at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:114)
      at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
      at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137)
      at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
      at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111)
      at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
      at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:170)
      at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
      at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)
      at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
      at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:200)
      at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
      at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:116)
      at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
      at org.springframework.security.web.csrf.CsrfFilter.doFilterInternal(CsrfFilter.java:100)
      at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
      at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
      at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:64)
      at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
      at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
      at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105)
      at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
      at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56)
      at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
      at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
      at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:214)
      at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:177)
      at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
      at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
      at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)
      at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
      at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:105)
      at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
      at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:81)
      at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
      at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
      at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
      at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
      at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
      at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:478)
      at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
      at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80)
      at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
      at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
      at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:799)
      at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
      at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
      at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1455)
      at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
      at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
      at java.lang.Thread.run(Thread.java:745)
  </code></pre>
  
  <p>What could be going wrong?</p>