1

Spring MVC 和 FreeMarker 框架的新功能。按照教程开始使用它。
当我尝试添加更多模型对象并在 freemarker 模板中访问它时。但它没有用。我对将模型对象访问到 freemarker 模板完全一无所知。
控制器

@RequestMapping(value = "/index", method = RequestMethod.GET)
    public String index(@ModelAttribute("model") ModelMap model) {

        String amount = "Amount";
    Document xml = readProductXML();
    model.addAttribute("users", userList);
    model.addAttribute("sectionName",amount);

        return "index";
    }

自由标记

<#import "spring.ftl" as spring />
   <fieldset>
      <legend>${sectionName}</legend>
  </fieldset>
</#list>

错误

The following has evaluated to null or missing:
==> sectionName  [in template "index.ftl" at line 28, column 67]

XML

<FreeMarkerUI>
    <section name="amount" label="Amount">
        <field name="firstName" label="First Name" type="text" mandatory="yes"/>
        <field name="lastName" label="Last Name" type="text" mandatory="yes"/>
        <field name="country" label="Country" type="dropdown" codeTableName="country" mandatory="no"/>
    </section>
</FreeMarkerUI>
4

3 回答 3

3

你也可以做这样的Himanshu:

public class User {
  private List<String> users;
  private String user;

  //getters and setters
}

public ModelAndView home (){
  ModelAndView mav = new ModelAndView("/someurl");
  User userToReturn = new User();

  userToReturn.setUser("Big Joe");

  //get userList from somewhere

  userToReturn.setUsers(userList);

  mav.addObject("user", userToReturn);

  return mav;
}

然后在您的 Freemarker 中,您只需执行以下操作即可访问用户对象

<fieldset>
  <legend>${user.user}</legend>
</fieldset>

或者

<fieldset>
  <#list user.users as displayUser>
    <legend>${displayUser}</legend>
  </#list>
</fieldset>

您在第二次发布后更改了一些变量名称,所以我只是将两个帖子结合起来给出答案。

这是一个非常简单的例子,但是如果你有很多不同的参数进入你的控制器并且模型属性输出,将它们全部保存在一个对象中而不是必须为每个模型对象定义一个对象会变得更加有用。 MAV 来处理。

这个相同的对象也可以与@ModelAttribue注释一起使用

public ModelAndView home (@ModelAttribute User user) {
  ModelAndView mav = new ModelAndView("/someurl");

  //do cool and exciting stuff with the user object

  mav.addObject("user", user);

  return mav;
}

如果您想从同一页面一遍又一遍地将信息传递给控制器​​方法,这会有所帮助。

于 2015-06-01T19:06:03.540 回答
2

您需要绑定 @ModelAttribute 的名称才能在 Freemarker 表达式中使用它。将您的 freemarker 模板更改为:

<#import "spring.ftl" as spring />
<@spring.bind "model" />
<fieldset>
    <legend>${model.sectionName}</legend>
</fieldset>
于 2013-10-04T09:22:41.910 回答
0

我通过将控制器方法更改为

public ModelAndView home() {
 ModelAndView mav = new ModelAndView();
 mav.addObject("users", userList);
 mav.addObject("user", "Big Joe");
 return mav;
}
于 2013-07-16T13:54:00.910 回答