-
Notifications
You must be signed in to change notification settings - Fork 3k
Closed
Labels
area/quteThe template engineThe template enginekind/enhancementNew feature or requestNew feature or request
Description
I'd like to use boolean operators like && and ||. Currently, when using an expression such as {update && todo.completed}, I'm getting a stacktrace like this (both update and todo are variables in the template context):
java.lang.IllegalArgumentException: Not a virtual method: &&(todo
at io.quarkus.qute.Expressions.parseVirtualMethodParams(Expressions.java:32)
at io.quarkus.qute.EvaluatorImpl$EvalContextImpl.<init>(EvaluatorImpl.java:118)
at io.quarkus.qute.EvaluatorImpl.resolveReference(EvaluatorImpl.java:69)
at io.quarkus.qute.EvaluatorImpl.lambda$resolveReference$1(EvaluatorImpl.java:72)
at java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:981)
at java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2124)
at java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:110)
at io.quarkus.qute.EvaluatorImpl.resolveReference(EvaluatorImpl.java:70)
at io.quarkus.qute.EvaluatorImpl.evaluate(EvaluatorImpl.java:48)
at io.quarkus.qute.ResolutionContextImpl.evaluate(ResolutionContextImpl.java:31)
at io.quarkus.qute.ExpressionNode.resolve(ExpressionNode.java:25)
at io.quarkus.qute.SectionNode$SectionResolutionContextImpl.execute(SectionNode.java:112)
at io.quarkus.qute.SectionHelper$SectionResolutionContext.execute(SectionHelper.java:31)
at io.quarkus.qute.Parser$1$1.resolve(Parser.java:67)
at io.quarkus.qute.SectionNode.resolve(SectionNode.java:33)
at io.quarkus.qute.TemplateImpl.renderData(TemplateImpl.java:92)
at io.quarkus.qute.TemplateImpl.access$200(TemplateImpl.java:14)
at io.quarkus.qute.TemplateImpl$TemplateInstanceImpl.renderAsync(TemplateImpl.java:73)
at io.quarkus.resteasy.qute.runtime.TemplateResponseFilter.filter(TemplateResponseFilter.java:58)
at org.jboss.resteasy.core.interception.jaxrs.ContainerResponseContextImpl.filter(ContainerResponseContextImpl.java:361)
at org.jboss.resteasy.core.ServerResponseWriter.executeFilters(ServerResponseWriter.java:232)
at org.jboss.resteasy.core.ServerResponseWriter.writeNomapResponse(ServerResponseWriter.java:97)
at org.jboss.resteasy.core.ServerResponseWriter.writeNomapResponse(ServerResponseWriter.java:70)
at org.jboss.resteasy.core.SynchronousDispatcher.writeResponse(SynchronousDispatcher.java:578)
at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:508)
at org.jboss.resteasy.core.SynchronousDispatcher.lambda$invoke$4(SynchronousDispatcher.java:252)
at org.jboss.resteasy.core.SynchronousDispatcher.lambda$preprocess$0(SynchronousDispatcher.java:153)
at org.jboss.resteasy.core.interception.jaxrs.PreMatchContainerRequestContext.filter(PreMatchContainerRequestContext.java:363)
at org.jboss.resteasy.core.SynchronousDispatcher.preprocess(SynchronousDispatcher.java:156)
at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:238)
at io.quarkus.resteasy.runtime.standalone.RequestDispatcher.service(RequestDispatcher.java:73)
at io.quarkus.resteasy.runtime.standalone.VertxRequestHandler.dispatch(VertxRequestHandler.java:120)
at io.quarkus.resteasy.runtime.standalone.VertxRequestHandler.access$000(VertxRequestHandler.java:36)
at io.quarkus.resteasy.runtime.standalone.VertxRequestHandler$1.run(VertxRequestHandler.java:85)
at io.quarkus.runtime.CleanableExecutor$CleaningRunnable.run(CleanableExecutor.java:224)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:2011)
at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1535)
at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1426)
at org.jboss.threads.DelegatingRunnable.run(DelegatingRunnable.java:29)
at org.jboss.threads.ThreadLocalResettingRunnable.run(ThreadLocalResettingRunnable.java:29)
at java.lang.Thread.run(Thread.java:748)
at org.jboss.threads.JBossThread.run(JBossThread.java:479)
Interestingly, behavior is different when using an if:
{#if update && todo.completed}
...
{/if}
In this case no exception is raised but it seems the second operand is silently ignored.
Metadata
Metadata
Assignees
Labels
area/quteThe template engineThe template enginekind/enhancementNew feature or requestNew feature or request