2013-04-18 2 views
5

मुझे नवीनतम प्ले फ्रेमवर्क 2.1.1 संदेश, चर, लूप के लिए सरल आदि का उपयोग करके स्कैला टेम्पलेट में कुछ कच्चे HTML को मुद्रित करने की आवश्यकता है। सब कुछ ठीक काम कर रहा है। लेकिन क्या होगा यदि मुझे कुछ तर्क करने और कच्चे HTML को टेम्पलेट में प्रिंट करने की आवश्यकता है?स्कैला टेम्पलेट में HTML प्रिंट करें

@{ 
    val courts = venue.getCourts() 
    val totalWidth : Int = 920 
    .. some other initialization variables/values 

    var output : String = "" 
    for(court <- courts) { 
     output += "<p>SomeComplexString</p>" 
    } 

    output 
} 

इस मामले @{} समारोह में output रिटर्न लेकिन है कि HTML बच रहा है और यह भी (लौटने से पहले ही output चर में सब कुछ के संयोजन) इसलिए व्यावहारिक नहीं है।

अगर मैं की तरह

for(court <- courts) { 
    println("<p>SomeComplexString</p>") 
} 

कुछ डाल यह काम नहीं कर रहा (मैं किसी भी त्रुटि संकलन लेकिन वहाँ उत्पादन पर कुछ भी नहीं है नहीं मिलता है)।

मैं

@for(court <- courts) { 
    <p>SomeComplexString</p> 
} 

कर सकता है, लेकिन फिर courts होगा बाहर के दायरे (बस मैं शुरुआत पर टेम्पलेट चर के रूप में courts को परिभाषित नहीं कर सकते हैं मान लीजिए)।

समाधान क्या है?

उत्तर

14

लेकिन अगर मुझे कुछ तर्क करने और कच्चे HTML को टेम्पलेट में मुद्रित करने की आवश्यकता है तो क्या होगा?

प्ले फ्रेमवर्क, जैसे अन्य एमवीसी फ्रेमवर्क, चिंताओं का सख्त अलगाव की सिफारिश करता है। आपका तर्क आपके नियंत्रक में होना चाहिए, न कि दृश्य में। यही कारण है कि स्कैला टेम्पलेट्स में ऐसा करने के लिए अपेक्षाकृत जटिल है।

इसके अलावा, आप अनपेक्षित चर प्रदर्शित करने के लिए @Html() का उपयोग कर सकते हैं।

+0

सही उत्तर लेकिन सुरक्षा चिंताओं के कारण '@Html()' का उपयोग करने से बचें। – adis

+0

@adis क्या आप कृपया @Html() की सुरक्षा चिंताओं को निर्दिष्ट कर सकते हैं? – user1943442

+0

@ user1943442 स्क्रिप्ट इंजेक्शन यदि आप उपयोगकर्ता इनपुट से '@ एचटीएमएल' का उपयोग करते हैं। कुछ और पढ़ें: http://wonko.com/post/html-escaping – adis

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