Velocity模板不会在java spark

时间:2017-03-21 21:52:15

标签: java velocity spark-java

所以,我正在尝试创建一个页面,它从数据库中获取数据并在页面上显示它。

我正在使用 Java Spark 作为 Velocity模板引擎的后端。

我将数据库中的记录放入存储对象的数组列表中。

class DB_record {
    private String id;
    private String value;

    public DB_record(String i, String v){
        this.id = i;
        this.value = v;
    }

    //... getters and setters
}

然后我定义了这条路线(它从DB获取过去项目的所有记录,并应在我的模板中显示):

get("/projects", (req, res) -> {
    ArrayList<DB_records> db_data = DB.getProjects();

    Map<String, Object> data = new HashMap<>();
    data.put("db_data", db_data);
    return new VelocityTemplateEngine().render(new ModelAndView(data, "templates/projects.vtl")); //render template
});

这是我的模板文件,它应显示所有项目:

<ul>
    #foreach ($row in $db_data)
    <li>
        <div>
            <a href="/projects/$row.getid()" style="font-size:16px"> $row.getvalue() </a>
        </div>
    </li>
    #end
</ul>

但是,当我访问此页面时,它显示的是:/projects/$row.getid()(字面意思),而不是显示链接,即将我的值作为元素的文本显示到/ projects / 2。 它确实遍历列表,正确的数量为&lt; li>生成元素,但文本不呈现。

我尝试编辑我的db_record类以获取公共参数,使用getter获取公共参数,使用getter创建私有参数,但似乎没有任何工作。无论我做什么,它都不会像现在这样呈现。

我还尝试将速度变量放在花括号{}中,但它也没有帮助

我完全迷失在我还能尝试的其他方面,所以感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

你唯一的错误在a href部分。应该是:

<a href="/projects/${row.getid()}" style="font-size:16px"> ${row.getvalue()} </a>

速度变量周围的曲线括号及其功能。

答案 1 :(得分:0)

我已经尝试了很多方法来最终实现这一目标。

我的班级:

//add public before class  bcos of this not getting the value in my eclipse
public class DB_record implements Serializable {
    private String id;
    private String value;


    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    @Override
    public String toString() {
        return "db_datas{" +
                "id='" + id + '\'' +
                ", value='" + value + '\'' +
                '}';
    }
}

添加列表:

Map<String, Object> contextMap = new HashMap<String, Object>();
    List<DB_record>db_data = new ArrayList<>();
    DB_record data1 = new DB_record();
    data1.setId("1");
    data1.setValue("soora");

    DB_record data2 = new DB_record();
    data2.setId("2");
    data2.setValue("tamil");
    db_data.add(data1);
    db_data.add(data2);
    dbDataObject.setDbDatas(db_data);
    contextMap.put("db_data",db_data);

最后模板:

您必须仅使用属性表达式来获取值:

<ul>
        #foreach ($row in $db_data)
            <li>
                <div>
                    <a href="/projects/${row.id}" style="font-size:16px"> ${row.value} </a>
                </div>
            </li>
        #end
    </ul>