2016-08-02 4 views
8

मैं इंटेलिजे पर वसंत बूट और थाइमेलीफ का उपयोग करके एक छोटा वेब फॉर्म एप्लिकेशन लिख रहा हूं, लेकिन ऐसा लगता है कि एचटीएमएल फाइल में, मॉडल के सभी फ़ील्ड को हल नहीं किया जा सकता है। यहाँ मेरी कोड है:IntelliJ में स्प्रिंग बूट + थाइमेलीफ: वर्र्स को हल नहीं कर सकता

नियंत्रक वर्ग:

@Controller 
public class IndexController{ 

    @RequestMapping(value = "/", method = RequestMethod.GET) 
    public String index(){ 
     return "index"; 
    } 

    @RequestMapping(value="/", method = RequestMethod.POST) 
    public String addNewPost(@Valid Post post, BindingResult bindingResult, Model model){ 
     if(bindingResult.hasErrors()){ 
      return "index"; 
     } 
     model.addAttribute("title",post.getTitle()); 
     model.addAttribute("content",post.getContent()); 
     return "hello"; 
    } 
} 

मॉडल कक्षा:

public class Post { 

    @Size(min=4, max=35) 
    private String title; 

    @Size(min=30, max=1000) 
    private String content; 

    public String getTitle() { 
     return title; 
    } 

    public void setTitle(String title) { 
     this.title = title; 
    } 

    public String getContent() { 
     return content; 
    } 

    public void setContent(String content) { 
     this.content = content; 
    } 
} 

तो index.html है:

<!DOCTYPE html> 
<html xmlns:th="http://www.thymeleaf.org"> 
<head lang="en"> 

    <title>Spring Framework Leo</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 
</head> 
<body> 

<h3>Spring Boot and Thymeleaf</h3> 


    <form action="#" th:action="@{/}" th:object="${post}" method="post"> 
     <table> 
      <tr> 
       <td>Title:</td> 
       <td><input type="text" th:field="*{title}" /></td> 
       <td th:if="${#fields.hasErrors('title')}" th:errors="*{title}">Title error message</td> 
      </tr> 
      <tr> 
       <td>Content:</td> 
       <td><input type="text" th:field="*{content}" /></td> 
       <td th:if="${#fields.hasErrors('content')}" th:errors="*{content}">Content error message</td> 
      </tr> 
      <tr> 
       <td><button type="submit">Submit post</button></td> 
      </tr> 
     </table> 
    </form> 

हमेशा के तहत लाल लाइनों रहे हैं " पोस्ट "," शीर्षक "और" सामग्री ", लेकिन मुझे नहीं पता कि इसे कैसे हल किया जाए। क्या यह इंटेलिजे की समस्या है या सिर्फ मेरे कोड की समस्या है?

+0

यह इंटेलिजे 2013.3 में तय किया जाना चाहिए, मेरा संपादित उत्तर देखें। –

उत्तर

12

यह इंटेलिजे: IDEA-132738 के साथ एक समस्या है।

मूल रूप से IntelliJ मॉडल चर का पता लगाने में असमर्थ है जब स्प्रिंग बूट का उपयोग सब कुछ स्वत: कॉन्फ़िगर करने के लिए किया गया है।

+1

मैं इंटेलिजे 2017.2 का उपयोग कर रहा हूं और यह समस्या अभी भी आईडीई में मौजूद है। जब मैं अपनी एचटीएमएल फाइलों पर जाता हूं तो यह बहुत हावी है। क्यों JetBrains लोगों ने Thymeleaf समर्थन के लिए यह तय नहीं किया है? – MAC

+0

@MAC यह IntelliJ 2013.3 में तय किया जाना चाहिए, मेरा संपादित उत्तर देखें। –

+0

हम केवल सर्वश्रेष्ठ के लिए आशा कर सकते हैं। कोई बात नहीं धन्यवाद!!! – MAC

8
  1. अपने इंटेलीजे संस्करण < 2017.3, यह है, तो Andrew wrote के रूप में, एक ज्ञात त्रुटि IDEA-132738। आईडीई में त्रुटि चिह्नों से छुटकारा पाने के लिए एक कामकाज है। इंटेलीजे भी नीचे उल्लेख कोड की अर्द्ध स्वचालित पीढ़ी का समर्थन करता है:

आप ऑल्ट उपयोग कर सकते हैं + क्रम में इरादा आह्वान करने के लिए "टिप्पणी एनोटेशन में बाहरी चर घोषित" शॉर्टकट से छुटकारा पाने के दर्ज आपके विचारों में "अनसुलझा मॉडल विशेषता"।

आप एक्सटेंशन का उपयोग करते ThymeLeaf द्वारा स्वचालित रूप से निर्माण किया वस्तुओं ऐसे #temporals रूप thymeleaf-extras-java8time से रूपांतरण के लिए java.time वस्तुओं की,:

निम्नलिखित कोड अपने html फ़ाइल में जोड़े

<span th:text="${#temporals.format(person.birthůDate,'yyyy-MM-dd')}"></span> 

और IntelliJ उन्हें हल नहीं कर सकता, समान कोड का उपयोग कर सकता है, और ऑब्जेक्ट नाम के सामने # जोड़ें:

<[email protected] id="#temporals" type="org.thymeleaf.extras.java8time.expression.Temporals"--> 
    अपने इंटेलीजे संस्करण है
  1. हैं> = 2017.3, समस्या का समाधान हो जाना चाहिए (@FloatOverflow: "मैं पुष्टि करते हैं कि संस्करण में 2017.3 25.Oct.2017 निर्माण समस्या हल हो गई है "):

स्प्रिंग बूट के लिए स्थिति 2017,3

समर्थन MVC अनुप्रयोगों autoconfigured पूरा हो गया है, सभी बंडल स्वचालित दृश्य प्रकार समर्थित हैं।

फिक्स संस्करण: 2017।3

+0

मैं पुष्टि करता हूं कि संस्करण 2017.3 में 25.ऑक्ट.2017 का निर्माण समस्या हल हो गई है! – FloatOverflow

+1

@FloatOverflow मैं 2017.3 चला रहा हूं और मेरी ऑब्जेक्ट्स अभी भी रेखांकित हैं। कोई विचार क्या मैं गलत कर रहा हूँ? उदाहरण के लिए, नीचे दिए गए कोड में 'test' और 'name' दोनों रेखांकित हैं। '

' – justinraczak

+0

@justinraczak मैं आपको न्यूनतम, पूर्ण और सत्यापन योग्य उदाहरण बनाने के लिए अनुशंसा करता हूं (https : //stackoverflow.com/help/mcve) और जेटब्रेन को इसकी रिपोर्ट करें। आप इसे उपरोक्त उल्लिखित मुद्दे में जोड़ सकते हैं, या एक नया बना सकते हैं। –

1

मैं एक और चीज़ जोड़ना चाहता हूं। जैसा ऊपर बताया गया है, यह मुद्दा इंटेलिजे 2017.3 में तय किया गया है। मैं इसकी पुष्टि भी कर सकता हूं।

हालांकि, मैंने देखा है कि यह केवल तभी सही है जब आप जिम्मेदार नियंत्रक फ़ंक्शन के अंदर सीधे को परिभाषित करते हैं। इस:

@RequestMapping(value = "/userinput") 
public String showUserForm(Model model){ 
    model.addAttribute("method", "post"); 
    model.addAttribute("user", new User()); 
    return "userform"; 
} 

आप किसी उप-समारोह है जिसमें आप मॉडल विशेषताओं को परिभाषित उपयोग कर रहे हैं (देखें उदाहरण नीचे), IntelliJ अभी भी HTML टेम्पलेट में गुण नहीं मिल रहा।

उदाहरण:

@RequestMapping(value = "/userinput") 
public String showUserForm(Model model){ 
    return doIt(model); 
} 

private String doIt(Model model) { 
    model.addAttribute("method", "post"); 
    model.addAttribute("user", new User()); 
    return "userform"; 
} 

तो, हमेशा सुनिश्चित करें कि आप दृश्य समारोह के अंदर सीधे अपने कोड डाल कर!

+0

और/या यदि आपका अनुरोध मैपिंग कोटलिन में है, तो उत्तर उपयोगी है, आईडीई को निजी विधि का उपयोग करने की तरह विशेषताओं को नहीं दिखता है। –

संबंधित मुद्दे