2017-03-21 45 views
0

所以,我试图制作一个页面,它从数据库中提取数据并将其显示在页面上。速度模板不会呈现java中的对象spark

我正在使用Java Spark用于后端速度模板引擎

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

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> 

然而,当我存取权限这个页面,而不是显示为/项目链接即/ 2我作为文本元素的值,就说明这一点:/projects/$row.getid()(字面) 它会遍历整个列表,因为会生成正确数量的< li>元素,但文本不会呈现。

我试着编辑我的db_record类有公共参数,与getter公共参数,getters私人参数,但似乎没有任何工作。无论我做什么,它都不会像它应该那样呈现。

我也试图把速度变量在大括号{},但它并没有帮助,以及

我完全失去了上还有什么我可以尝试,所以任何帮助表示赞赏!

回答

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> 
+0

'public'是课题,是的,非常感谢! –

0

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

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

速度变量和它的函数在一起的大括号。

+0

我看,这有点烦人。为什么Velocity文档提及阅读属性和方法? –

+0

抱歉老兄,我解决了我的答案。你只需把大括号放在正确的地方。 – SHG

+0

另一个解决方案解决了这个问题 - 我的课程不是公开的(因为我在其他课程中有这个文件),无论如何,谢谢 –