Velocity 模板不在 java spark 中渲染对象

Velocity template doesn't render objects in java spark

所以,我正在尝试制作一个页面,从数据库中获取数据并将其显示在页面上。

我正在使用 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
}

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

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>

但是,当我访问此页面时,它没有显示 link 即 /projects/2 并将我的值作为元素的文本,而是显示:/projects/$row.getid( ) (字面上地) 它确实遍历列表,因为生成了适当数量的 < li > 元素,但文本没有呈现。

我尝试编辑我的 db_record class 以具有 public 参数,具有带吸气剂的 public 参数,带吸气剂的私有参数,但似乎没有任何效果.无论我做什么,它都不会按应有的方式呈现。

我也试过将速度变量放在花括号 { } 中,但也没有用

我完全不知道还能尝试什么,所以非常感谢您的帮助!

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

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

速度变量及其函数周围的大括号。

我已经尝试了很多方法来最终实现它。

我的Class:

//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>