के साथ न्यूलाइन वर्णों को प्रतिस्थापित करें मेरे पास एक फ़ील्ड (<textarea name="desc" />
) है जिसमें न्यूलाइन हो सकती है और मैं उन्हें अपने HTML समकक्ष के साथ प्रतिस्थापित करना चाहता हूं: <br />
। मैं यह कैसे कर सकता हूँ? मैं Thymeleaf 2.1.4.RELEASE उपयोग कर रहा हूँ।थाइमेलीफ: <br>
उत्तर
As in JSP, इसका इस्तेमाल करना संभव नहीं है सरल और सीधा
${#strings.replace(desc, '\n', '<br />')}
रहे हैं कम से कम दो समस्याओं:
- '\ n' अंतर्निहित अभिव्यक्ति भाषा (मेरे मामले में स्पेल के रूप से किया जाता है मैं वसंत MVC) का उपयोग कर रहा स्ट्रिंग शाब्दिक कि दो अलग-अलग वर्ण होने के रूप में: '\' और 'एन' नहीं बल्कि एक नई पंक्ति चरित्र
- अपवाद XML पार्सर अंतर्निहित टी की अनुमति नहीं है Thymeleaf के रूप में फेंक दिया जा रहा है की तुलना में ओ
<
और>
अंदर भाव
समाधान मैं पहली समस्या के लिए मिला एक नियंत्रक में न्यू लाइन चरित्र की स्थापना की और देखने के लिए इसे पारित करने के लिए है डाल दिया।
दूसरी समस्या को हल करने के लिए आपको <
और के बजाय के बजाय <
का उपयोग करने की आवश्यकता है। यह भी याद रखें कि यह बजाय th:text
// in controller:
model.addAttribute("newLineChar", '\n');
// in view
${#strings.replace(desc, newLineChar, '<br />')}
आप Thymeleaf + स्प्रिंग (क्या इसका मतलब है कि Thymeleaf OGNL के बजाय स्पेल का उपयोग करेगा) का उपयोग कर रहे हैं, तो th:utext
का उपयोग कर निकलता है, तो आप भी स्पेल T operator
है इस तरह से उपयोग कर सकते हैं क्या तुम नहीं अपने नियंत्रक लेकिन बाहर इस मामले में है कि न्यू लाइन विभाजक मन में नई पंक्ति चर घोषित करने के लिए ऑपरेटिंग सिस्टम के बीच अलग अलग होंगे, जो आपके ऐप्लिकेशन पर चल रहा है है:
${#strings.replace(desc, T(System).getProperty('line.separator'), '<br />')}
क्या मैं अंत में उपयोग करने के लिए जा रहा हूँ का संयोजन है + अपाचे StringUtils कि public static final String LF = "\n";
को परिभाषित करता है ऊपर :
${#strings.replace(desc, T(org.apache.commons.lang3.StringUtils).LF, '<br />')}
यह एक कस्टम बोली के साथ ऐसा कर और इनलाइन स्पेल या हैक्स का एक बहुत बिना ऐसा करने को संभालने के लिए प्रोसेसर का श्रेय देना संभव है।
एक कस्टम बनाया जा रहा है प्रोसेसर गुण
public class NewlineAttrProcessor extends AbstractUnescapedTextChildModifierAttrProcessor
{
public NewlineAttrProcessor()
{
super("nl2br");
}
@Override
protected String getText(Arguments arguments, Element element, String attributeName)
{
final Configuration configuration = arguments.getConfiguration();
final IStandardExpressionParser parser =
StandardExpressions.getExpressionParser(configuration);
final String attributeValue = element.getAttributeValue(attributeName);
final IStandardExpression expression =
parser.parseExpression(configuration, arguments, attributeValue);
final String value = (String)expression.execute(configuration, arguments);
return StringUtils.replace(value, "\n", "<br />");
}
@Override
public int getPrecedence()
{
return 10000;
}
}
आप AbstractUnescapedTextChildModifierAttrProcessor
प्रोसेसर का विस्तार करने के लिए है या फिर आप <br />
के लिए html इकाई टैग मिल जाएगा और आप वास्तव में एक लाइन ब्रेक नहीं मिलेगा।
एक कस्टम बोली
बनाना तुम इतनी तरह एक बोली वर्ग की जरूरत है एक कस्टम बोली लागू करने के लिए:
public class MyCustomDialect extends AbstractDialect
{
@Override
public String getPrefix()
{
return "cd";
}
@Override
public Set<IProcessor> getProcessors()
{
final Set<IProcessor> processors = new HashSet<>();
processors.add(new NewlineAttrProcessor());
return processors;
}
}
getPrefix
विधि वापसी मान आप किसी भी कस्टम प्रोसेसर कॉल करने के लिए प्रयोग करेंगे क्या है कि तुम बनाओ। उदाहरण के लिए, Thymeleaf th
उपयोग करता है। हम इस ऊपर लागू किया कस्टम प्रोसेसर nl2br
की तलाश में है तो आप th:text
के बजाय cd:nl2br
विशेषता का प्रयोग करेंगे इसे कहते हैं।
अपने मुख्य वर्ग में पंजीयन अपने नए बोली
, तो आप सिर्फ एक @Bean
कि आपके बोली वर्ग का एक नया उदाहरण वापस आ जाएगी बनाना होगा। कस्टम बोलियों को लागू करने के लिए
<div cd:nl2br="${myObject.myField}">MY MULTILINE FIELD</div>
अधिक गहन गाइड के लिए:
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
@Bean
public MyCustomDialect myCustomDialect()
{
return new MyCustomDialect();
}
}
अपने कस्टम प्रोसेसर का उपयोग करके
अंत में, अपने टेम्पलेट फ़ाइल में आप इस तरह HTML टैग होता है मैं थाइमेलीफ डॉक्स की सिफारिश करता हूं:
रूप डोमिनिक, न्यू लाइन काम नहीं करता है के लिए \n
द्वारा कहा गया। हालांकि, आप
का उपयोग कर सकते हैं।
${#strings.replace(desc,' ','<br>')}
या कोड इंजेक्शन को रोकने के लिए भागने के साथ: अगर मैं कुछ मॉडल विशेषता (एचटीएमएल गाया नहीं) में पाठ वर्णों की जगह के रूप में इस बात को समझ
${#strings.replace(#strings.escapeXml(desc),' ','<br>')}
बस लोगों की मदद करने के लिए। लाइनफिड चरित्र का ASCII है। यह एक आकर्षण की तरह काम किया :) – borjab
- 1. थाइमेलीफ
- 2. थाइमेलीफ
- 3. थाइमेलीफ
- 4. थाइमेलीफ
- 5. थाइमेलीफ
- 6. मैं थाइमेलीफ
- 7. वसंत थाइमेलीफ बूटस्ट्रैप सीएसएस
- 8. थाइमेलीफ - बूलियन ऑपरेटर
- 9. थाइमेलीफ और वसंत
- 10. थाइमेलीफ बनाम टाइल्स
- 11. स्प्रिंग बूट और थाइमेलीफ
- 12. थाइमेलीफ - फ़ॉर्मेटिंग (यानी दिनांक)
- 13. वें में एकाधिक स्थिति कैसे प्राप्त करें: यदि थाइमेलीफ
- 14. थाइमेलीफ में सिर और शीर्षक
- 15. फ्लाइंग सॉकर, थाइमेलीफ और स्प्रिंग
- 16. थाइमेलीफ - सख्त HTML पार्सिंग समस्या
- 17. डंडेलियन डेटाटेबल + थाइमेलीफ + अंकन अंक
- 18. डेटा का उपयोग कर- * थाइमेलीफ
- 19. स्प्रिंग एमवीसी, थाइमेलीफ और आरईएसटी
- 20. क्या थाइमेलीफ में जेएसपी टैग की तरह कुछ है?</p> <p><strong><em>ChildPage.jsp</em></strong>:
- 21. थाइमेलीफ - वें: फ़ील्ड = "$ {}" और वें: फ़ील्ड = "* {}"
- 22. थाइमेलीफ: यूआरएल विशेषता मान कैसे प्राप्त करें
- 23. थाइमेलीफ टेम्पलेट्स में सत्र विशेषताओं तक पहुंच
- 24. वसंत जेएसपी एमवीसी और थाइमेलीफ एमवीसी
- 25. वसंत नियंत्रकों को उनके थाइमेलीफ दृश्यों (intellij14)
- 26. थाइमेलीफ + वसंत: लाइन ब्रेक कैसे रखें?
- 27. थाइमेलीफ | क्या TemplateEngine.process थ्रेड-सुरक्षित ऑपरेशन है?
- 28. "1 <0"
- 29. मिक्सिंग फ्रंट एंड एंड सर्वर-साइड टेक्नोलॉजीज (स्प्रिंग, थाइमेलीफ, एंगुलरजेएस)
- 30. थाइमेलीफ स्प्रिंग फॉर्म त्रुटि संदेश प्रदर्शित नहीं कर रहा है
मैं कुछ याद आ रही है? यदि ऐसा है, तो आप सादे जावा का उपयोग कर नियंत्रक में ऐसा क्यों नहीं करते? –
यह भी देखें http://stackoverflow.com/q/37765352/883073 –
@ हेलकनास्ट: इस तरह का काम दृश्य-विशिष्ट है। क्या होगा यदि आपने एक और दृश्य कार्यान्वयन जोड़ा जो * .doc फ़ाइलों को प्रस्तुत करता है? आप "
" के साथ स्ट्रिंग को उजागर करने वाले मॉडल विशेषता के साथ समाप्त हो जाएंगे जो कि .doc प्रारूप में अमान्य हैं - यही कारण है कि यह नियंत्रकों के लिए नौकरी नहीं है। – dominik