You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vert.x4.4.1中MVEL模板无法访问context变量的问题求助

Vert.x MVEL模板无法访问context变量的问题

我遇到了一个无法定位来源的错误,恳请知道问题根源的人指点。我尝试在模板中捕获context变量,根据Vert.x文档这应该是可行的。

文档中的示例代码:

The request path is @{context.request().path()}

The variable 'foo' from the session is @{context.session().get('foo')}

The value 'bar' from the context data is @{context.get('bar')}

我已配置引擎与处理器:

MVELTemplateEngine engine = MVELTemplateEngine.create(vertx);
TemplateHandler handler = TemplateHandler.create(engine);

路由配置如下:

router.get("/login").handler(routingContext -> {
                String header_location="/login";
                
                routingContext.put("traducciones",traducciones);

                if (Users.existAdminUser()){
                    routingContext.next();
                }else {
                    header_location="accounts/register-admin";
                    routingContext.response().putHeader("location", header_location).setStatusCode(302).end();
                }
            });

我在模板中尝试访问翻译内容:

@code{traducciones = context.get("traducciones")}

却收到以下错误:

2023-04-08 20:09:10,388 ERROR [HttpServerVerticle-5] Unhandled exception in router
org.mvel2.PropertyAccessException: [Error: could not access: context; in class: java.util.HashMap]
[Near : {... code{traducciones = context.get("traducciones")} ....}]
                                 ^
[Line: 1, Column: 22]
    at org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.getBeanProperty(ReflectiveAccessorOptimizer.java:706) ~[mvel2-2.3.1.Final.jar:?]
    at org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.compileGetChain(ReflectiveAccessorOptimizer.java:360) ~[mvel2-2.3.1.Final.jar:?]
    at org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.optimizeAccessor(ReflectiveAccessorOptimizer.java:163) ~[mvel2-2.3.1.Final.jar:?]
    at org.mvel2.optimizers.dynamic.DynamicOptimizer.optimizeAccessor(DynamicOptimizer.java:80) ~[mvel2-2.3.1.Final.jar:?]
    at org.mvel2.ast.ASTNode.optimize(ASTNode.java:159) ~[mvel2-2.3.1.Final.jar:?]
    at org.mvel2.ast.ASTNode.getReducedValueAccelerated(ASTNode.java:115) ~[mvel2-2.3.1.Final.jar:?]
    at org.mvel2.compiler.ExecutableAccessor.getValue(ExecutableAccessor.java:38) ~[mvel2-2.3.1.Final.jar:?]
    at org.mvel2.ast.AssignmentNode.getReducedValueAccelerated(AssignmentNode.java:116) ~[mvel2-2.3.1.Final.jar:?]
    at org.mvel2.compiler.ExecutableAccessor.getValue(ExecutableAccessor.java:42) ~[mvel2-2.3.1.Final.jar:?]
    at org.mvel2.MVEL.executeExpression(MVEL.java:929) ~[mvel2-2.3.1.Final.jar:?]
    at org.mvel2.templates.res.CompiledCodeNode.eval(CompiledCodeNode.java:50) ~[mvel2-2.3.1.Final.jar:?]
    at org.mvel2.templates.res.TextNode.eval(TextNode.java:42) ~[mvel2-2.3.1.Final.jar:?]
    at org.mvel2.templates.res.TextNode.eval(TextNode.java:42) ~[mvel2-2.3.1.Final.jar:?]
    at org.mvel2.templates.TemplateRuntime.execute(TemplateRuntime.java:285) ~[mvel2-2.3.1.Final.jar:?]
    at org.mvel2.templates.TemplateRuntime.execute(TemplateRuntime.java:281) ~[mvel2-2.3.1.Final.jar:?]
    at io.vertx.ext.web.templ.mvel.impl.MVELTemplateEngineImpl.render(MVELTemplateEngineImpl.java:84) ~[vertx-web-templ-mvel-4.4.1.jar:4.4.1]
    at io.vertx.ext.web.common.template.TemplateEngine.render(TemplateEngine.java:52) ~[vertx-web-common-4.4.1.jar:4.4.1]
    at io.vertx.ext.web.handler.impl.TemplateHandlerImpl.handle(TemplateHandlerImpl.java:75) ~[vertx-web-4.4.1.jar:4.4.1]
    at io.vertx.ext.web.handler.impl.TemplateHandlerImpl.handle(TemplateHandlerImpl.java:32) ~[vertx-web-4.4.1.jar:4.4.1]
    at io.vertx.ext.web.impl.RouteState.handleContext(RouteState.java:1284) ~[vertx-web-4.4.1.jar:4.4.1]
    at io.vertx.ext.web.impl.RoutingContextImplBase.iterateNext(RoutingContextImplBase.java:177) ~[vertx-web-4.4.1.jar:4.4.1]
    at io.vertx.ext.web.impl.RoutingContextImpl.next(RoutingContextImpl.java:141) ~[vertx-web-4.4.1.jar:4.4.1]
    at enkoa.HttpServerVerticle.lambda$2(HttpServerVerticle.java:162) ~[main/:?]
    at io.vertx.ext.web.impl.RouteState.handleContext(RouteState.java:1284) ~[vertx-web-4.4.1.jar:4.4.1]
    at io.vertx.ext.web.impl.RoutingContextImplBase.iterateNext(RoutingContextImplBase.java:177) ~[vertx-web-4.4.1.jar:4.4.1]
    at io.vertx.ext.web.impl.RoutingContextImpl.next(RoutingContextImpl.java:141) ~[vertx-web-4.4.1.jar:4.4.1]
    at io.vertx.ext.web.handler.impl.SessionHandlerImpl.handle(SessionHandlerImpl.java:321) ~[vertx-web-4.4.1.jar:4.4.1]
    at io.vertx.ext.web.handler.impl.SessionHandlerImpl.handle(SessionHandlerImpl.java:37) ~[vertx-web-4.4.1.jar:4.4.1]
    at io.vertx.ext.web.impl.RouteState.handleContext(RouteState.java:1284) ~[vertx-web-4.4.1.jar:4.4.1]
    at io.vertx.ext.web.impl.RoutingContextImplBase.iterateNext(RoutingContextImplBase.java:177) ~[vertx-web-4.4.1.jar:4.4.1]
    at io.vertx.ext.web.impl.RoutingContextImpl.next(RoutingContextImpl.java:141) ~[vertx-web-4.4.1.jar:4.4.1]
    at io.vertx.ext.web.handler.impl.SessionHandlerImpl.lambda$handle$7(SessionHandlerImpl.java:316) ~[vertx-web-4.4.1.jar:4.4.1]
    at io.vertx.core.impl.future.FutureImpl$1.onSuccess(FutureImpl.java:91) ~[vertx-core-4.4.1.jar:4.4.1]
    at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60) ~[vertx-core-4.4.1.jar:4.4.1]
    at io.vertx.core.impl.future.FutureImpl.addListener(FutureImpl.java:196) ~[vertx-core-4.4.1.jar:4.4.1]
    at io.vertx.core.impl.future.FutureImpl.onSuccess(FutureImpl.java:87) ~[vertx-core-4.4.1.jar:4.4.1]
    at io.vertx.ext.web.handler.impl.SessionHandlerImpl.handle(SessionHandlerImpl.java:290) ~[vertx-web-4.4.1.jar:4.4.1]
    at io.vertx.ext.web.handler.impl.SessionHandlerImpl.handle(SessionHandlerImpl.java:37) ~[vertx-web-4.4.1.jar:4.4.1]
    at io.vertx.ext.web.impl.RouteState.handleContext(RouteState.java:1284) ~[vertx-web-4.4.1.jar:4.4.1]
    at io.vertx.ext.web.impl.RoutingContextImplBase.iterateNext(RoutingContextImplBase.java:177) ~[vertx-web-4.4.1.jar:4.4.1]
    at io.vertx.ext.web.impl.RoutingContextImpl.next(RoutingContextImpl.java:141) ~[vertx-web-4.4.1.jar:4.4.1]
    at io.vertx.ext.web.handler.impl.BodyHandlerImpl.handle(BodyHandlerImpl.java:96) ~[vertx-web-4.4.1.jar:4.4.1]
    at io.vertx.ext.web.handler.impl.BodyHandlerImpl.handle(BodyHandlerImpl.java:46) ~[vertx-web-4.4.1.jar:4.4.1]
    at io.vertx.ext.web.impl.RouteState.handleContext(RouteState.java:1284) ~[vertx-web-4.4.1.jar:4.4.1]
    at io.vertx.ext.web.impl.RoutingContextImplBase.iterateNext(RoutingContextImplBase.java:177) ~[vertx-web-4.4.1.jar:4.4.1]
    at io.vertx.ext.web.impl.RoutingContextImpl.next(RoutingContextImpl.java:141) ~[vertx-web-4.4.1.jar:4.4.1]
    at io.vertx.ext.web.impl.RouterImpl.handle(RouterImpl.java:68) ~[vertx-web-4.4.1.jar:4.4.1]
    at io.vertx.ext.web.impl.RouterImpl.handle(RouterImpl.java:37) ~[vertx-web-4.4.1.jar:4.4.1]
    at io.vertx.core.http.impl.Http1xServerRequestHandler.handle(Http1xServerRequestHandler.java:67) ~[vertx-core-4.4.1.jar:4.4.1]
    at io.vertx.core.http.impl.Http1xServerRequestHandler.handle(Http1xServerRequestHandler.java:30) ~[vertx-core-4.4.1.jar:4.4.1]
    at io.vertx.core.impl.ContextInternal.dispatch(ContextInternal.java:264) ~[vertx-core-4.4.1.jar:4.4.1]
    at io.vertx.core.impl.WorkerContext.lambda$emit$0(WorkerContext.java:59) ~[vertx-core-4.4.1.jar:4.4.1]
    at io.vertx.core.impl.WorkerContext.lambda$execute$4(WorkerContext.java:121) ~[vertx-core-4.4.1.jar:4.4.1]
    at io.vertx.core.impl.TaskQueue.run(TaskQueue.java:76) ~[vertx-core-4.4.1.jar:4.4.1]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) [?:?]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) [?:?]
    at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [netty-common-4.1.90.Final.jar:4.1.90.Final]
    at java.lang.Thread.run(Thread.java:833) [?:?]

我是严格按照Vert.x文档进行操作的,恳请帮忙排查问题。

内容的提问来源于stack exchange,提问作者gabrielmarquez29

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 01:08:07