簡體   English   中英

如何在Freemarker模板中訪問Spring MVC模型對象?

[英]How to access Spring MVC model objects in Freemarker template?

Spring MVC和FreeMarker framewroks的新功能。 按照教程開始使用它。
當我嘗試添加更多模型對象並在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";
    }

Freemarker的

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

您需要綁定@ModelAttribute的名稱才能在Freemarker表達式中使用它。 將您的freemarker模板更改為:

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

你也可以這樣做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>

您在第二次發布后更改了一些變量名稱,所以我只是合並了兩個帖子來給出答案。

這是一個非常簡單的示例,但是如果您的控制器和模型屬性中有很多不同的參數,那么將它們全部保存在一個Object中而不是必須為每個模型對象定義它們會變得更有用。 MAV處理。

同樣的對象也可以與@ModelAttribue注釋一起@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;
}

如果您想要從同一頁面反復傳遞信息到控制器方法,這可能會有所幫助。

通過將控制器方法更改為,我已將其工作

public ModelAndView home() {
 ModelAndView mav = new ModelAndView();
 mav.addObject("users", userList);
 mav.addObject("user", "Big Joe");
 return mav;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM