FreeMarker模板错误:以下内容评估为null或缺少| 但是不是真的

Azi*_*ziz 6 java freemarker maven

我面临的错误是如此奇怪。一切看起来都很好,但是当浏览器将GET请求发送到服务器时出现此错误。我实际上想捕获的是HTTP参数,将它们保存在发送到Freemarker模板的ArrayList中保存的对象中。

请你帮助我好吗?非常感谢。

错误:

freemarker.log._JULLoggerFactory $ JULLogger错误严重:执行FreeMarker模板时出错FreeMarker模板错误:以下内容评估为空或丢失:==> item.lat1 [在模板“ view / result.ftl”中,第18行,第15列]

freemarker.core.InvalidReferenceException:[...异常消息已经被打印;请参阅上方...],位于freemarker.core.EvalUtil.coerceModelToString(EvalUtil.java:355)处,位于freemarker.core.EvalUtil.java:355,位于freemarker.core.Expression.evalAndCoerceToString(Expression.java :)处82)在freemarker.core.DollarVariable.accept(DollarVariable.java:41)在freemarker.core.Environment.visit(Environment.java:324)在freemarker.core.MixedContent.accept(MixedContent.java:54)在freemarker。 freemarker.core.IteratorBlock $ IterationContext.executeNestedBlock(IteratorBlock.java:220)处的freemarker.core.IteratorBlock $ IterationContext.executeNestedBlockInner(IteratorBlock.java:268)处的core.Environment.visitByHiddingParent(Environment.java:345) 。

[qtp285763673-17]错误spark.webserver.MatcherFilter-java.lang.IllegalArgumentException:freemarker.core.InvalidReferenceException:以下内容评估为null或缺少:==> item.lat1 [在模板“ view / result.ftl”中,位于第18行,第15栏]

..但是,是的,因为我确实打印了Array,并且效果很好!

  final FreeMarkerEngine freeMarkerEngine = new FreeMarkerEngine();
    final Configuration freeMarkerConfiguration = new Configuration();
    freeMarkerConfiguration.setTemplateLoader(new ClassTemplateLoader(App.class, "/"));
    freeMarkerEngine.setConfiguration(freeMarkerConfiguration);

    get("/rest", (request, response) -> {
        Double lat1 = Double.parseDouble(request.queryParams("lat1") != null ? request.queryParams("lat1") : "anonymous");
        Double lon1 = Double.parseDouble(request.queryParams("lon1") != null ? request.queryParams("lon1") : "anonymous");
        Double lat2 = Double.parseDouble(request.queryParams("lat2") != null ? request.queryParams("lat2") : "anonymous");
        Double lon2 = Double.parseDouble(request.queryParams("lon2") != null ? request.queryParams("lon2") : "anonymous");

        if (shouldReturnHtml(request)) {
            response.status(200);
            response.type("text/html");
            Map<String, Object> attributes = new HashMap<>();
            attributes.put("list",loadTheList(lat1,lon1,lat2,lon2));
            return freeMarkerEngine.render(new ModelAndView(attributes, "/view/result.ftl"));
        }
        else {
            response.status(200);
            response.type("application/json");
            return null;
        }
    });


}

private static boolean shouldReturnHtml(Request request) {
    String accept = request.headers("Accept");
    return accept != null && accept.contains("text/html");
}
public static ArrayList<Bereken> loadTheList(double lat1, double lon1, double lat2, double lon2) {
    ArrayList<Bereken> list = new ArrayList<>();
    list.add(new Bereken(lat1,lon1,lat2,lon2));
    return list;
}
Run Code Online (Sandbox Code Playgroud)

和result.ftl:

      <#list list as item>
        <h2>${item.lat1}</h2>
        <h2>${item.lon1}</h2>
        <h2>${item.lat2}</h2>
        <h2>${item.lon2}</h2>
    </#list>
Run Code Online (Sandbox Code Playgroud)

Ala*_*n47 5

我知道这是一个老问题,但我刚刚遇到了这个问题。如果您将私有类的实例(我刚刚尝试过)传递给它,Freemarker 还会抱怨该值“为空或丢失”。如果你在一个Java Bean类通过,它需要是public。在这种情况下,错误消息非常具有误导性。


小智 2

您正在将 Bereken 类的 1 个实例添加到“列表”中。所以我假设 Bereken 类不提供公共属性 lat1、lat2、lon1、lon2 或相应的 getter 方法。