2012-03-28 16 views
5

मेरे पास Freemarker के साथ स्प्रिंग एमवीसी प्रोजेक्ट है जो रिज़ॉल्यूवर के रूप में है। कुछ टेम्पलेट्स में मुझे होस्टनाम समेत लिंक जेनरेट करना होगा, लेकिन मुझे यह नहीं मिल रहा है। JSP में मैं हो सकता है इस तरह करना है:फ्रीमार्कर टेम्पलेट में होस्टनाम कैसे प्राप्त करें?

`<% String hostName=request.getServerName();%>` 

मैं "requestContextAttribute" का उपयोग करने की कोशिश की, लेकिन requestContext.getContextPath() होस्ट नाम के बिना पथ लौट आए। मुझे पूर्ण पथ या होस्टनाम अलग से कहां मिल सकता है?

उत्तर

1

हम इसे जेएसटीएल में कर सकते हैं। FreeMarker में यह अनुकूल प्रयास करें:

${pageContext.request.serverName} 
+1

फ्रीमार्कर के पास पृष्ठ कॉन्टेक्स्ट नहीं है, हालांकि मेरे पास ऑब्जेक्ट का अनुरोध है। मैं उससे होस्टनाम कैसे प्राप्त कर सकता हूं? –

-1

इस कोड freemarker में काम करना चाहिए:

<#assign hostname = request.getServerName() /> 
<a href="http://${hostname}/foo">bar</a> 

लेकिन freemarker साथ बेहतर जावा में सर्वर नाम हो और स्ट्रिंग के रूप में टेम्प्लेट में पुश करने के लिए है।

+0

यह मेरे लिए काम नहीं किया। 'अनुरोध' अपरिभाषित था। –

1

यह समझना महत्वपूर्ण है कि फ्रीमार्कर जानबूझकर उस संदर्भ के ज्ञान के बारे में नहीं जानता है जिसका उपयोग इसे अधिक सामान्य बनाने के लिए किया जाता है। इसका मतलब है कि जेएसपी के विपरीत, इसे डिफ़ॉल्ट रूप से HttpServletRequest और Response ऑब्जेक्ट तक पहुंच नहीं है। यदि आप इसे एक्सेस करना चाहते हैं, तो आपको इसे प्रदान करने की आवश्यकता होगी।

जिस तरह से मैंने हल किया था, वह एक अनुरोध पत्र के रूप में HttpServletRequest ऑब्जेक्ट को जोड़ने के लिए एक सर्वलेट फ़िल्टर बनाना था जिसे Freemarker तक पहुंच है।

/** 
* This simple filter adds the HttpServletRequest object to the Request Attributes with the key "RequestObject" 
* so that it can be referenced from Freemarker. 
*/ 
public class RequestObjectAttributeFilter implements Filter 
{ 

    /** 
    * 
    */ 
    public void init(FilterConfig paramFilterConfig) throws ServletException 
    { 

    } 

    public void doFilter(ServletRequest req, 
     ServletResponse res, FilterChain filterChain) 
      throws IOException, ServletException 
    { 
     req.setAttribute("RequestObject", req); 

     filterChain.doFilter(req, res); 
    } 

    public void destroy() 
    { 

    } 

} 

आप इसे काम करने के लिए उसके लिए आपको अपने web.xml में यह निर्धारित करने होंगे:

:

<filter> 
    <filter-name>RequestObjectAttributeFilter</filter-name> 
    <filter-class>com.foo.filter.RequestObjectAttributeFilter</filter-class>  
</filter> 

<filter-mapping> 
    <filter-name>RequestObjectAttributeFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

फिर, मेरी .ftl फाइलों में, मैं निम्नलिखित का उपयोग कर सकते

${Request.RequestObject.getServerName()} 
+1

आप अपने कंट्रोलर के अंदर से एक विशेषता के रूप में अनुरोध ऑब्जेक्ट भी जोड़ सकते हैं। यदि आपको अपनी साइट के कई स्थानों पर इसकी आवश्यकता नहीं है, तो यह शायद बेहतर है। –

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