2017-02-12 226 views
0

還有就是Element類:使用thymeleaf到表格數據發佈到使用@ModelAttribute(複雜對象)一個控制器

public class Element { 

    private Long id; 
    private Name name; 

    // Getters and Setters ... 
} 

Name類:

public class Name { 

    private String en; 
    private String fr; 
    private String de; 

    // Getters and Setters ... 
} 

有一個getElementsController:

@GetMapping("/elements/create") 
public String getElementsCreate() { 
    return "private/new-element"; 
} 

有一個NewElementController控制器:

@PostMapping("/elements/create") 
    public String postElementsCreate(@ModelAttribute Element element) { 

     System.out.println(element) 
     return null; 
} 

還有就是數據發佈到NewElementController一種形式:

<form method="post" th:object="${element}" th:action="@{/elements/create}"> 
    <input type="text" value="1" name="id" placeholder="Id"/> 
    // How should I make the input fields for: 
     element.name.en ? 
     element.name.fr ? 
     element.name.de ? 
    <button type="submit">Save element</button> 
</form> 

設置ID的工作原理,但我不能訪問name場(這是一個對象)
我試圖與th:field="*{name}"th:field="*{name.en}",但它不起作用。

+2

你有model.addAttribute( 「元素」,新元素())在@GetMapping方法? –

+0

我現在用@GetMapping控制器更新了這個問題。我必須在那裏放些東西嗎? – Cristian

+1

as @GurkanYesilyurt說你需要將新元素對象設置爲你的映射 – cralfaro

回答

1

嘗試以下操作:

<form method="post" th:object="${element}" th:action="@{/elements/create}"> 
    <input type="text" name="id" th:value="*{id}" placeholder="Id"/> 
    <input type="text" name="name.en" th:value="*{name.en}" placeholder="Name (EN)"/> 
    <input type="text" name="name.fr" th:value="*{name.fr}" placeholder="Name (FR)"/> 
    <input type="text" name="name.de" th:value="*{name.de}" placeholder="Name (DE)"/> 
    <button type="submit">Save element</button> 
</form> 

爲GET尤爾控制器的方法應該是這樣的:

@GetMapping("/elements/create") 
public String getElementsCreate(Model model) { 
    Element element = new Element(); 
    Name name = new Name(); 
    element.setName(name); 
    model.addAttribute("element", element); 
    return "private/new-element.html"; 
} 
+0

我已經嘗試過了,但它給了我以下錯誤:'評估SpringEL表達式的異常:「element.name.en」(private/new-element:37 )]與根本原因org.springframework.expression.spel.SpelEvaluationException:EL1007E:屬性或字段'名稱'無法找到空' – Cristian

+1

像gurkan說,你有model.addAttribute(「元素」,新元素())在@GetMapping方法中? – mhshimul

+0

請使用@GetMapping檢查我的問題的更新。我必須在那裏添加一些東西嗎? – Cristian

相關問題