Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Velocity Decorator / 21 сообщений из 21, страница 1 из 1
11.03.2012, 19:53:51
    #37699438
alexander00513
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Velocity Decorator
Возможно ли в Velocity реализовать вот такую вещь http://www.symfony-project.org/jobeet/1_4/Doctrine/ru/04 ? По ссылке - раздел "Обёртка". Можно ли создать один layout и подключать в него различный контент ? Приложение на Spring.
...
Рейтинг: 0 / 0
11.03.2012, 20:30:37
    #37699481
JЧайник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Velocity Decorator
Можно в основной шаблон вставлять другие шаблоны через
#parse("$content")
переменной $content передается имя нужного шаблона "ххххх.vm"
...
Рейтинг: 0 / 0
11.03.2012, 20:45:35
    #37699504
alexander00513
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Velocity Decorator
Это нужно контроллером возвращать каждый раз layout и переменную, которую нужно ещё предварительно создать... Вроде как можно настроить viewResolver велосити, что бы он всё вставлял в какой то шаблон. Пытаюсь разобраться с этим http://velocity.apache.org/tools/devel/view/layoutservlet.html, пока не получается. (
...
Рейтинг: 0 / 0
11.03.2012, 21:25:27
    #37699544
JЧайник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Velocity Decorator
Если я правильно понял, то по приведенной ссылке предлагается то же самое.
Есть основной контент, присутствующий у всех страниц, в который с помощью #parse() вставляются разные шаблоны индивидуального содержимого этих страниц.
Верно? Это тебе нужно? Если да, то попробую найти свой проект, в котором это реализовано.
...
Рейтинг: 0 / 0
11.03.2012, 21:34:16
    #37699551
alexander00513
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Velocity Decorator
Да, правильно. Но дело в том, что там в контексте определяется файл по умолчанию, в котором парсятся страницы. Поищи, а то у меня что то никак не получится...
...
Рейтинг: 0 / 0
11.03.2012, 22:57:17
    #37699623
alexander00513
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Velocity Decorator
Ребят, разъясните, если я подключу 2 сервлета - они оба будут работать или только тот, который быстрее инициализируется ?
...
Рейтинг: 0 / 0
11.03.2012, 23:00:11
    #37699625
JЧайник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Velocity Decorator
Смотри, есть основной шаблон страницы с хидером, футером миддл баром и т.д.
В него нужно вставлять различный контент, в зависимости от запрашиваемого url
Контент(содержимое наших страниц) будем загружать в переменную $content и вставлять его в нужное место
основного шаблона с помощью #parse("$content")

Вот пример из моего проекта.
файл template.vm



Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
	<title>"ДМ-Редакция"</title>
	<meta http-equiv="content-type" content="text/html; charset=utf-8" />
        <script  type="text/javascript" src="js/jquery/jquery-latest.js"></script>
	<link rel="stylesheet" href="css/home.css" type="text/css" media="screen" />

</head>
<body>
<div id="wrapper">

<div id="header">
    <div id="logo">
        <a href="home.shtml" title="На главную"> </a>
</div>
    <div id="header_user">
        #if($loginUser)
            $loginUser.Fullname ($loginUser.User): <a href="#">Профиль</a> | <a href="submit/unlogin.do">Выход </a>
        #else
             Привет, Гость ( <a href="submit/login.do">Войти </a> )
        #end
     </div> <!--"header_user"-->

    <div id="header_find">
        <form action=""> <input class="field" type="text" name="EditBoxFind">
        <input type="submit" name="Submit" value="Поиск"></form>
     </div> <!--"header_find"-->

</div><!-- #header-->

<div id="tabs">


    <a class="cur" href="home.shtml">Главная</a>
    <a href="publication.shtml">Издания</a>
    <a href="state.shtml">Статусы</a>
    <a href="group.shtml">Группы</a>
    <a href="user.shtml">Пользователи</a>
    <a href="ticket.shtml">Активные</a>
    <a href="license.shtml">Лицензии</a>

 </div><!--#tabs-->


<div id="middle">
		<div id="container">
			<div id="content">#parse("$content")</div><!-- #content-->
		</div><!-- #container-->

		<div class="sidebar sl">
Левый бар

		</div><!-- .sidebar.sl -->



</div><!-- #middle-->
</div><!-- #wrapper -->
<div id="footer">
Copyright © 2009 "xxxxxxxxx Ltd". All rights reserved.
</div><!-- #footer -->

</body>
</html>
...
Рейтинг: 0 / 0
11.03.2012, 23:15:48
    #37699644
JЧайник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Velocity Decorator
чтобы присвоить переменной $content имя шаблона страницы и загнать ее в контекст velocity,
я использую для каждой страницы свой класс.
Вот , например, класса для страницы publication.shtml
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
import org.apache.velocity.VelocityContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import ru.guimi.entity.Page;

public class PublicationWorker extends AbstractWorker implements Worker {


    public Page execute(HttpServletRequest request, HttpServletResponse response) {
        super.execute(request, response);
       if (request.getParameter("id")==null){
         page.put("content", "publication.vm");}
       else
         page.put("content", "pubdetail.vm");

        return page;
}
...
Рейтинг: 0 / 0
11.03.2012, 23:19:15
    #37699648
alexander00513
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Velocity Decorator
С этим то понятно, а как это вызывается ? Контроллером всегда возвращается одна и та же страница(template.vm в нашем случае) и ещё одна, которая вставляется в #parse("$content") ? Я правильно понимаю ?
...
Рейтинг: 0 / 0
11.03.2012, 23:20:27
    #37699653
JЧайник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Velocity Decorator
блин, у меня интернет колбасит. отключается периодически...

страница publication.shtml

Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
<script language=javascript>
    function setPub()
        {
            var f = document.forms[1];
            f.submit();
        }
</script>



<!--h2>Мониторинг РИС </h2-->


<div id="pub">
<form name="pub" action="">
    Выбор издания (всего: $pubs.size())
    <select  name="pubs" id="11" onchange="setPub()">
    <option value="0">Все издания


#foreach( $pub in $pubs )
    <option name=$pub.Publication id=$pub.Defaultchannelid value=$pub.Defaultchannelid
        #if ($pub.Defaultchannelid==$selectedPubId) selected #end>$pub.Publication ##- $pub.Defaultchannelid
#end

</select>
        <!--input type="submit" name="ok" value="ОК"-->
</form>
 </div> <!--"pub"-->

################################################################
#set( $count = 0 )
<table id="docs" class="tablesorter" cellspacing="1">
<thead>
<tr>
    <th><b> </th>
    <th><b>Название</a></th>
    <th><b>Ид</a></td>
    <th><b>Секции</a></th>
    <th><b>Роутинг</a></th>
    <th><b>Канал/Выпуск</a></th>
</tr>

<tbody align="left">
#foreach( $pub in $pubs )

#set( $count = $count + 1 )


<tr bgcolor=$color>

#if (($selectedPubId=="0")||($pub.Defaultchannelid==$selectedPubId))

<td  valign="top" >$count</td>
<td  valign="top">$pub.Publication<br/><a href=$pub.Url>технологический процесс</a></td>
<td  valign="top">$pub.GazetId</td>
<td  valign="top">
    #set( $num = 0 )
    #foreach( $section in $pub.getSections())
        #set( $num = $num + 1 )
        $num :$section.Section
    </br>
    #end
</td>

<td  valign="top">
    #set( $num = 0 )
    #foreach( $rout in $pub.getRouting())
        #set( $num = $num + 1 )
        $num :$rout.Routeto
    </br>
    #end
</td>
<td  valign="top">
    #foreach( $channel in $pub.getChannels())
        <b>
        $channel.Name
        </b>
        </br>
        #set( $num = 0 )
        #foreach( $issue in $channel.getIssues())
            #set( $num = $num + 1 )
            <a href=$issue.Url>
            #if ($channel.Currentissueid == $issue.Id)
                <b style="color:red">$issue.Name</b>
            #else
                $issue.Name
            #end
            </a>
                - $issue.Id

            </br>

        #end

    </br>
    #end
</td>

</tr>
#end
#end
</tbody>
</table>
...
Рейтинг: 0 / 0
11.03.2012, 23:27:51
    #37699658
alexander00513
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Velocity Decorator
В принципе понятно. Но, было бы хорошо сделать так, что бы template.vm загружался всегда автоматически, а возвращаемые контроллером страницы вставлялись в какую нибудь переменную, типа $content. Вот тут http://velocity.apache.org/tools/devel/view/layoutservlet.html вроде как это реализовано, но нужно подключить и настроить VelocityLayoutServlet. Кстати по поводу моего вопроса по сервлетам - не подскажеш ? )
...
Рейтинг: 0 / 0
11.03.2012, 23:33:39
    #37699663
JЧайник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Velocity Decorator
теперь нам надо сопоставить запрашиваемому урл соответствующий класс .
Для этого в сервлете определяем HashMap , в который загоняем урлы всех наших страниц и соответствующие им классы, ну и процедуру, которая возвращает нужный класс.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
public class ControllerServlet extends HttpServlet {
    private static HashMap mappings;
 static {
        mappings = new HashMap<String, Class<Worker>>();
        mappings.put("/home.shtml",           HomeWorker.class);
        mappings.put("/publication.shtml",    PublicationWorker.class);
        mappings.put("/group.shtml",          GroupWorker.class);
        mappings.put("/user.shtml",           UserWorker.class);
        mappings.put("/test.shtml",           TestWorker.class);
        mappings.put("/state.shtml",          StateWorker.class);
        mappings.put("/ticket.shtml",         TicketWorker.class);
        mappings.put("/icense.shtml",        LicenseWorker.class);
        mappings.put("/account.shtml",        AccountFormWorker.class);
        mappings.put("/submit/login.do",      LoginWorker.class);
        mappings.put("/submit/unlogin.do",    LogoutWorker.class);
        mappings.put("/confirmation.shtml",   ConfirmationWorker.class);
        mappings.put("/login.shtml",          LoginFormWorker.class);
        mappings.put("/forum.shtml",          ForumWorker.class);
        mappings.put("/support.shtml",        SupportWorker.class);
        mappings.put("/woodwing.shtml",       WoodwingWorker.class);
        mappings.put("/woodwingcs.shtml",     WoodwingCSWorker.class);
        mappings.put("/proton.shtml",         ProtonWorker.class);
        mappings.put("/romb.shtml",           RombWorker.class);
        mappings.put("/portal.shtml",         PortalWorker.class);
        mappings.put("/issue.shtml",          IssueWorker.class);
        mappings.put("/reports.shtml",        ReportsWorker.class);

    }

    protected Class<Worker> getWorkerClass(String url) {
        Class<Worker> cls = (Class<Worker>) mappings.get(url);

            return (Class<Worker>) ((cls == null) ? ErrorWorker.class : cls);
    }
...
Рейтинг: 0 / 0
11.03.2012, 23:45:55
    #37699672
JЧайник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Velocity Decorator
В методе service сервлета

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
Class<Worker> cls = getWorkerClass(url);
            Worker worker = cls.newInstance();
            String cname=cls.getCanonicalName();

            Page page = worker.execute(request, response);
            if (page.getRedirectUrl() != null) {
                response.sendRedirect(page.getRedirectUrl());
            } else {
                response.addHeader("Cache-Control","private, no-cache");
                response.setDateHeader("Last-Modified", page.getStartDate());
            }

            String id=(request.getParameter("id")==null)?"0":request.getParameter("id");

           Publication publcation        =   pubService.getPublication(Integer.parseInt(id));
           List<Publication>  pubList   = pubService.getPubList();
             page.put("pub", publication);
             page.put("pubs", pubList);
             String templateName = page.getTemplateName();
              String html = wwstat.getTemplateManager().merge(templateName, page);
                Writer writer = response.getWriter();
                writer.write(html);
                writer.flush();
...
...
Рейтинг: 0 / 0
11.03.2012, 23:49:14
    #37699676
JЧайник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Velocity Decorator
alexander00513Ребят, разъясните, если я подключу 2 сервлета - они оба будут работать или только тот, который быстрее инициализируется ?
да сколько угодно подключай. все будут работать и вызываться в соответствии с мапингом, который ты укажешь в web.xml
...
Рейтинг: 0 / 0
11.03.2012, 23:51:57
    #37699679
JЧайник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Velocity Decorator
вот web.xml того проекта
я убрал все лишнее
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:javaee="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" id="WebApp_ID" version="2.4">
  <listener>
    <listener-class>ru.guimi.WWStatContextListener</listener-class>
  </listener>
  <servlet>
    <servlet-name>ControllerServlet</servlet-name>
    <servlet-class>ru.guimi.ControllerServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>ControllerServlet</servlet-name>
    <url-pattern>*.shtml</url-pattern>
  </servlet-mapping>

  <servlet-mapping>
    <servlet-name>ControllerServlet</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>

  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>
...
Рейтинг: 0 / 0
11.03.2012, 23:52:09
    #37699680
alexander00513
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Velocity Decorator
Окей, спасибо, буду пробовать )
...
Рейтинг: 0 / 0
11.03.2012, 23:54:03
    #37699681
JЧайник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Velocity Decorator
интернет отрубается, собака. если будут вопросы, завтра отвечу
...
Рейтинг: 0 / 0
11.03.2012, 23:59:21
    #37699687
alexander00513
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Velocity Decorator
Хорошо, спасибо большое ).
...
Рейтинг: 0 / 0
13.03.2012, 02:30:17
    #37701843
alexander00513
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Velocity Decorator
Как подключить VelocityTools ?
...
Рейтинг: 0 / 0
13.03.2012, 12:05:56
    #37702340
JЧайник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Velocity Decorator
alexander00513Как подключить VelocityTools?

не понял, в чем проблема?
какие библиотеки использовать?
там в сэмплах есть showcase.war.
задеплой его и посмотри
...
Рейтинг: 0 / 0
19.03.2012, 15:08:26
    #37711840
alexander00513
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Velocity Decorator
создал новую тему.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Velocity Decorator / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]