使用和显示变量

现在,让我们给主页添加更多内容。比如,我们可能想要在欢迎信息下面显示日期,就像这样:

Welcome to our fantastic grocery store!

Today is: 12 july 2010

首先,我们要修改controller,把日期作为上下文变量添加进去:

public void process(
            final HttpServletRequest request, final HttpServletResponse response,
            final ServletContext servletContext, final ITemplateEngine templateEngine)
            throws Exception {

    SimpleDateFormat dateFormat = new SimpleDateFormat("dd MMMM yyyy");
    Calendar cal = Calendar.getInstance();

    WebContext ctx = 
            new WebContext(request, response, servletContext, request.getLocale());
    ctx.setVariable("today", dateFormat.format(cal.getTime()));

    templateEngine.process("home", ctx, response.getWriter());

}

我们已经往上下文里添加了String变量today。现在我们就可以在模版里显示它了:

<body>

  <p th:utext="#{home.welcome}">Welcome to our grocery store!</p>

  <p>Today is: <span th:text="${today}">13 February 2011</span></p>

</body>

如你所见,我们仍旧使用th:text属性(这是正确的,因为我们想要替换标签的主体),但是这次语法有点不同。我们使用${...},而不是#{...}表达式。这是一个变量表达式,使用了OGNL(对象导航图语言)。它会在上下文变量的映射关系里被执行。

${today}表达式表示“取得叫做today的变量”,然而这些表达式可以变得更为复杂(比如${user.name} 指的是取得叫做user的变量,并调用它的forgetName()方法)。

在属性值的选择上,有相当多的可能性:信息、变量表达式,等等。下一章将展示这些可能性。

Last updated