Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Выдача velocity-шаблонов через сервлет


Автор: check 26.4.2008, 08:51
Так выглядит код сервлета
Код

public class FrontController extends HttpServlet {

    private ArrayList al = new ArrayList();


    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        String filePath = getServletContext().getRealPath("/test.vm");
        String output = null;
        try {
            output = DoVelo(filePath);
        }
        catch(Exception ex) {
             throw new RuntimeException(ex.getMessage());
        }
        out.print(output);
    }

        private void fillList()
    {
        al.add(new Product("Enlargement pills", 12.99f));
        al.add(new Product("English courses", 55.99f));
        al.add(new Product("Book - How to Lose Weight", 34.99f));
    }

    public String DoVelo(String file) throws Exception {
        fillList();
        StringWriter sw = new StringWriter();
        Velocity.init();
        Template t = Velocity.getTemplate(file);
        VelocityContext vc = new VelocityContext();
        vc.put("products", al);
        t.merge(vc, sw);
        return sw.getBuffer().toString();
    }



Ошибка: Unable to find resource 'C:\apache-tomcat-5.5.20\webapps\velo\test.vm'

getServletContext().getRealPath смотрит туда, куда нужно. Если искать таким образом, скажем, файл test.html, он находится.


Кроме самого velocity поключены velocity tools. Выдача шаблонов напрямую
(c помощью ViewServlet входящего в Velocity Tools) работает. 
Но я не понял(не нашёл в документации), как в этом случае я могу организовать добавление в VelocityContext того же 
ArrayList`а из примера выше. 

Запусается это всё на Томкате.

Автор: Stampede 26.4.2008, 09:17
Не надо указывать Velocity абсолютные пути к шаблонам. Это неудобно во всех отношениях. Лучше один раз задать в конфиге базу для всех шаблонов, а потом ссылаться на них просто по имени:

Код

...
resource.loader = file
file.resource.loader.class = org.apache.velocity.runtime.resource.loader.FileResourceLoader
file.resource.loader.path = C:\apache-tomcat-5.5.20\webapps\velo
...


Код

Template t = Velocity.getTemplate("test.vm"); // будет разрешен относительно базы шаблонов


Подробнее о конфиге пропертями - в http://velocity.apache.org/engine/releases/velocity-1.5/developer-guide.html.

А еще рекомендую проштудировать тему http://forum.vingrad.ru/forum/topic-124877.html - там вопросам конфигурации и запуска отведено особое место.

Автор: check 26.4.2008, 17:57
Спасибо,  с конфигом все получилось.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)