2011-07-29 46 views
5

Làm cách nào để định cấu hình freemarker cho các mẫu tìm kiếm trong một số lọ? Với mùa xuân.các mẫu freemarker trong một số lọ

<!-- freemarker config --> 
<bean id="freemarkerConfig" 
    class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> 
    <property name="templateLoaderPaths" value="classpath:/freemarker/" /> 
</bean> 

Một tệp chiến tranh (để triển khai) và tệp jar (phụ thuộc).

One.war

/freemarker/simple.ftl

Two.jar

/freemarker/test.ftl

làm việc.

ModelAndView mav = new ModelAndView(); 
mav.setViewName("simple"); 

Không hoạt động. Không thể tìm thấy test.ftl

ModelAndView mav = new ModelAndView(); 
mav.setViewName("test"); 

Nếu cài đặt là:

<property name="templateLoaderPaths" value="classpath:/freemarker/,classpath:/freemarker2/" /> 

One.war

/freemarker/simple.ftl

Two.jar

/freemarker2/test.ftl

Làm việc.

ModelAndView mav = new ModelAndView(); 
mav.setViewName("simple"); 

Làm việc.

ModelAndView mav = new ModelAndView(); 
mav.setViewName("test"); 

Và câu hỏi! Cách đặt cấu hình freemarker để tìm kiếm trong một số lọ (các cuộc chiến tranh) trong cùng một đường dẫn (classpath:/freemarker /)?

+0

Hmm, đây là điều tôi chưa bao giờ tự làm việc. Quan tâm đến câu trả lời. Ngoài ra, các tệp '.ftl' của tôi nằm trong '/ WEB-INF/freemarker /' –

+0

Nơi các tệp không quan trọng như vậy. – Alexander

+1

câu hỏi hay, đáng tiếc về tỷ lệ chấp nhận của bạn. –

Trả lời

7

Tôi đã tìm thấy giải pháp! Tắt preferFileSystemAccess để luôn tải qua SpringTemplateLoader.

<!-- freemarker config --> 
<bean id="freemarkerConfig" 
    class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> 
    <property name="templateLoaderPaths" value="classpath:/freemarker/" /> 
    <property name="preferFileSystemAccess" value="false" /> 
</bean> 

public void setPreferFileSystemAccess (boolean preferFileSystemAccess)

Đặt liệu để thích truy cập hệ thống tập tin cho mẫu tải. Truy cập hệ thống tệp cho phép phát hiện các thay đổi mẫu.

Nếu điều này được kích hoạt, FreeMarkerConfigurationFactory sẽ cố gắng giải quyết "templateLoaderPath" được chỉ định làm tài nguyên hệ thống tệp (sẽ làm việc cho tài nguyên đường dẫn lớp mở rộng và tài nguyên ServletContext).

Mặc định là "true". Tắt tính năng này để luôn tải qua SpringTemplateLoader (tức là luồng, không phát hiện nóng các thay đổi mẫu), có thể cần thiết nếu một số mẫu của bạn nằm trong thư mục lớp mở rộng trong khi các tệp khác nằm trong tệp jar.

1

Một khi tôi đã làm một điều tương tự như cách lập trình:

public class ControllerServlet extends HttpServlet { 
    private Configuration cfg; 
    public void init() { 
    cfg = new Configuration(); 
    // 1 
    WebappTemplateLoader wtl = new WebappTemplateLoader(getServletContext(), "WEB-INF/templates"); 
    // 2 
    ClassTemplateLoader ctl = new ClassTemplateLoader(ControllerServlet.class, "templates"); 
    MultiTemplateLoader mtl = new MultiTemplateLoader(new TemplateLoader[] {wtl, ctl}); 
    cfg.setTemplateLoader(mtl); 
    //.... 
} 
} 

ControllerServlet là một lớp cơ sở cho servlets thật của tôi.

Số 1 đặt đường dẫn tìm kiếm cho mẫu thành {{WEB-INF/templates}} trong ngữ cảnh servlet hiện tại. Số 2 đặt đường dẫn tìm kiếm thứ hai cho gói con "mẫu".

Bạn có thể thêm nhiều đường dẫn mẫu hơn.

Hy vọng điều đó sẽ hữu ích.

Các vấn đề liên quan