Java Spark/Velocity 模板/SQL2o
Posted
技术标签:
【中文标题】Java Spark/Velocity 模板/SQL2o【英文标题】:Java Spark/Velocity Templates/SQL2o 【发布时间】:2018-02-27 11:48:16 【问题描述】:我正在使用带有 Apache 的 Velocity 模板引擎的 Spark Java Web 框架,以帮助设计一个从 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>
Layout 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】:我找到了答案!定义我的用户对象的类未定义为“公共”,因此模板文件无法访问数据。
对于在 sparkjava 站点上遵循教程并尝试过注释处理器 Project Lombok 的任何人,您将创建一个包含多个类定义的 java 文件,其中没有一个是公开的。龙目岛应该为您解决这个问题。但是,如果您像我一样不喜欢 Lombok 的骇人听闻的感觉,那么您可能已经创建了类文件并将代码从单个 java 文件中复制并粘贴到单独的类定义文件中。确保将您的课程公开!
【讨论】:
以上是关于Java Spark/Velocity 模板/SQL2o的主要内容,如果未能解决你的问题,请参考以下文章
java 替换文本中的所有指定的字符串,比如#*替换为sq, #**替换为we, 我使用了replaceAll进行的替换