Java Spark / Velocity Templates / SQL2o

时间:2017-09-18 20:34:12

标签: java list spark-java vtl

我将Spark Java Web Framework与Apache的Velocity Template Engine结合使用,以帮助设计一个从SQL数据库中提取数据的响应式Web应用程序。使用SQL2o我创建了一些自定义类类型的Java对象,即用户,组,站点等。

我已经检查过并填充了创建的对象列表。当我然后将我的对象列表放入一个hashmap并返回一个ModelandView时,出于某种原因我的列表就在那里,但我无法在vtl中使用它的任何属性。

main方法和Spark代码的相关部分:

public static void main(String[] args) {

        WEB_LOGMGR loggr = new WEB_LOGMGR(true);
        WEB_DBMGR dbmgr = new WEB_DBMGR(true, loggr);
        Model backend = new ScadaModel(dbmgr, loggr);

        System.out.println(dataToJson(backend.getUsers()));

        staticFiles.location("/");
        staticFiles.externalLocation("/");
        String layout = "/templates/layout.vtl";
        //secure("public/keystore.jks", "password", null, null);

        before("/form", (request, response) -> {
            boolean authenticated = false;
            // ... check if authenticated
            if (!authenticated) {
                halt(401, "You are not welcome here");
            }
        });

        get("/", (req, res) -> {
            HashMap pdata = new HashMap();
            pdata.put("template", "/templates/main.vtl");
            return new ModelAndView(pdata, layout);
        }, new VelocityTemplateEngine());

        get("/users", (req, res) -> {
            HashMap pdata = new HashMap();
            pdata.put("template", "/templates/users.vtl");
            pdata.put("users", backend.getUsers());
            return new ModelAndView(pdata, layout);
        }, new VelocityTemplateEngine());

Parsed User VTL的相关部分

<div class="w3-row-padding w3-margin-bottom">
    <div class="w3-container">
        <h5>SCADA Users</h5>
        <ul class="w3-ul w3-card-4 w3-white">
            #foreach( $user in $users )
                    <li class="w3-padding-16">
                        <img src="/images/cole.jpg" class="w3-left w3-circle w3-margin-right" style="width:35px">
                        <span class="w3-xlarge">$user.firstName</span><br>
                        <!-- The above line should return a name for my 3 users, but it doesn't. Removing the .firstname
                        allows the code to run but it just returns User@ and then a memory location -->
                    </li>
            #end
        </ul>
    </div>
</div>

布局VTL的相关部分

<!-- Overlay effect when opening sidebar on small screens -->
<div class="w3-overlay w3-hide-large w3-animate-opacity" onclick="w3_close()" style="cursor:pointer" title="close side menu" id="myOverlay"></div>

<!-- !PAGE CONTENT! -->
#parse( $template )

1 个答案:

答案 0 :(得分:1)

我找到了答案!定义我的用户对象的类未被定义为&#34; public&#34;因此模板文件无法访问数据。

对于在sparkjava网站上遵循教程并尝试使用注释处理器Project Lombok的任何人,您将创建一个具有多个类定义的java文件,其中没有一个被声明为public。龙目岛应该为你照顾这个。但是,如果你喜欢我并且你不喜欢龙目的感觉,你可能已经创建了类文件,并将代码从单个java文件中复制并粘贴到单个类定义文件中。确保公开宣布你的课程!