Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / хранить jspFragment между запросами / 25 сообщений из 25, страница 1 из 1
12.10.2012, 11:07:27
    #37995153
Penkov Vladimir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранить jspFragment между запросами
в custom tage есть jspFragment (getJspBody()) - отвечает за генерацию тела тега.
хочется его сохранить где-нибудь глобально, чтобы вызывать при необходимости. самый простой способ - сохранить его в Map чреват утечками (выглядит так что jspFragment создается в момент запроса).

кто-нибудь может подсказать что-нибудь в этом направлении?

Скажи микрософту прощай
...
Рейтинг: 0 / 0
12.10.2012, 11:23:23
    #37995204
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранить jspFragment между запросами
Какими ещё утечками? Привяжите Map к контексту или самой JSP.
...
Рейтинг: 0 / 0
12.10.2012, 11:25:25
    #37995209
Penkov Vladimir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранить jspFragment между запросами
BlazkowiczКакими ещё утечками? Привяжите Map к контексту или самой JSP.

к контексту чего? я в теге нахожусь, у меня нет страницы. и вызывать потом фрагмент я хочу в независимости от страницы (например, аяксом получить фрагмент, генерируемый тегом)
...
Рейтинг: 0 / 0
12.10.2012, 11:26:29
    #37995214
Penkov Vladimir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранить jspFragment между запросами
BlazkowiczКакими ещё утечками? Привяжите Map к контексту или самой JSP.

а утечки понятны, я сослался на страницу, потом обновил jsp - старый код соответственно не удалился
...
Рейтинг: 0 / 0
12.10.2012, 11:29:56
    #37995221
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранить jspFragment между запросами
Penkov Vladimirк контексту чего?

http://docs.oracle.com/javaee/5/api/javax/servlet/ServletConfig.html
http://docs.oracle.com/javaee/5/api/javax/servlet/ServletContext.html


Penkov Vladimirя в теге нахожусь, у меня нет страницы. и вызывать потом фрагмент я хочу в независимости от страницы (например, аяксом получить фрагмент, генерируемый тегом)
Через ThreadLocal туда можно что угодно пропихнуть. Причем во многих фреймверках вроде Spring MVC это реализовано разными утилитами.
...
Рейтинг: 0 / 0
12.10.2012, 11:33:25
    #37995230
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранить jspFragment между запросами
Penkov Vladimirа утечки понятны, я сослался на страницу, потом обновил jsp - старый код соответственно не удалился
Нифига не понялю. Зачем "куску" ссылка на страницу. Наоборот ведь нужно. На странице\сервлете получить ссылку на "кусок".
В любом случае, если это данные юзера, то через ThreadLocal пропихиваете Request и храните в сессии.
Если это данные приложения, то ServletConfig->ServletContext.
Можно просто глобальный Map завести и чистить в ServletContextListener. Почему Map это у вас обязательно "утечка", я всё ещё не понял.
...
Рейтинг: 0 / 0
12.10.2012, 11:49:09
    #37995270
0FD
0FD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранить jspFragment между запросами
Penkov Vladimir,

Может я не прав, поправьте. Но тело просто оформляется в метод, который можно вызывать несколько раз, зачем его хранить?
...
Рейтинг: 0 / 0
12.10.2012, 11:52:51
    #37995284
Penkov Vladimir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранить jspFragment между запросами
в JspFragment самом может храниться ссылка на сгенерированный класс jsp-сервлета.
...
Рейтинг: 0 / 0
12.10.2012, 11:55:42
    #37995298
Penkov Vladimir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранить jspFragment между запросами
0FDPenkov Vladimir,

Может я не прав, поправьте. Но тело просто оформляется в метод, который можно вызывать несколько раз, зачем его хранить?

проблема в том, что этот метод доступен только когда тег вызывается при построении страницы. а я хочу вдобавок уметь строить его вне страницы.

пример

a.jsp
[src]
<div id='s1'>
<tag:sample id='globalId'>foo=#{foo.value}<tag:sample>
</div>
[src]


теперь чтобы мне получить строку "foo=#{foo.value}", нужно вызвать a.jsp. Я же хочу получить доступ к строке вне всяких jsp.
...
Рейтинг: 0 / 0
12.10.2012, 11:55:42
    #37995299
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранить jspFragment между запросами
Penkov Vladimirв JspFragment самом может храниться ссылка на сгенерированный класс jsp-сервлета.
Зачем?
...
Рейтинг: 0 / 0
12.10.2012, 11:56:32
    #37995302
Penkov Vladimir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранить jspFragment между запросами
BlazkowiczPenkov Vladimirв JspFragment самом может храниться ссылка на сгенерированный класс jsp-сервлета.
Зачем?

что значит зачем? если ее там нет, то все тип топ. я сохранил фрагмент и начал его дергать. но сам фрагмент отдается мне контейнером, я понятия не имею что в нем и как, и можно ли его хранить
...
Рейтинг: 0 / 0
12.10.2012, 11:58:01
    #37995306
Penkov Vladimir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранить jspFragment между запросами
как вариант, я могу хранить не jspFragment, а кусок текста, получаемый в результате getJspBody().invoke(), и делать ручной парсинг. тоже вариант
...
Рейтинг: 0 / 0
12.10.2012, 11:58:53
    #37995309
0FD
0FD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранить jspFragment между запросами
Penkov Vladimir,

a jsp:include не пойдет?
...
Рейтинг: 0 / 0
12.10.2012, 12:56:48
    #37995443
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранить jspFragment между запросами
[quot Penkov Vladimir]проблема в том, что этот метод доступен только когда тег вызывается при построении страницы. а я хочу вдобавок уметь строить его вне страницы.

пример

a.jsp
Код: sql
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.
<div id='s1'>
  <tag:sample id='globalId'>foo=#{foo.value}<tag:sample>
</div>
[src]


теперь чтобы мне получить строку "foo=#{foo.value}", нужно вызвать a.jsp. Я же хочу получить доступ к строке вне всяких jsp.[/quot]
Ну, можно и динамически на сервере пользоваться возможностями jsp/jstl с помощью обертки для View (на примере SpringMVC). Например, сделать такой динамический класс:
[SRC JAVA]public class RenderView implements org.springframework.web.servlet.View {
	private StringWriter htmlString = new StringWriter();

	public RenderView(){}
	public RenderView(String[] parameters, String fragmentFilename, HttpServletRequest request, HttpServletResponse response) throws Exception {
		Map<String, String> model = new HashMap<String, String>();
		for (String parameter : parameters) {
			String[] pair = parameter.split(":", 2);
			model.put(pair[0], pair[1]);
		}
		this.render(model, fragmentFilename, request, response);
	}

	@Override
	public String getContentType() {
		return "text/html";
	}

	@Override
	public void render(Map<String, ?> model, String filename, HttpServletRequest request, HttpServletResponse response) throws Exception {
		final StringWriter html = new StringWriter();
		HttpServletResponseWrapper wrapper = new HttpServletResponseWrapper(response) {
			@Override
			public PrintWriter getWriter() throws IOException {
				return new PrintWriter(html);
			}
		};
		InternalResourceView realView = new InternalResourceView(filename);
		realView.render(model, request, wrapper);
		htmlString = html;
	}
	public String getHtml() {
		return htmlString.toString();
	}
}



И из контроллера (сервлета) вызвать:
Код: java
1.
2.
3.
4.
5.
...
String fragment = new renderView(new String[]{"foo.value":someObject.someValue}, "/WEB-INF/views/fragments/a.jsp", request, response);
...
response.getWriter().write(fragment);
...



Я, к примеру, использую подобную реализацию для рассылки почтовых сообщений из контроллера, шаблонами для которых являются jsp-файлы. Хотя согласен с коллегами, что оперировать фрагментами надо в самой jsp. Кстати, нормально настроенный SpringMVC может сам корректно отдавать куски кода с jsp/jstl-синтаксисом, то есть моя реализация понадобиться не должна. Да и идеологически надо между представлением и контроллером надо оперировать моделью, а не частями представления.
...
Рейтинг: 0 / 0
12.10.2012, 13:13:23
    #37995478
Penkov Vladimir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранить jspFragment между запросами
коллеги, я не внятно объяснил.

мне не нужна вся a.jsp. Мне нужнна только та часть, которая внутри тега.
цель - я могу в любой момент аяксом обновить часть страницы, заключенной внутри тега (на манер facelets), причем на сервере не будет строиться вся страница, а возьмется только нужный кусок, обработается и вернется мне в виде html
...
Рейтинг: 0 / 0
12.10.2012, 13:18:35
    #37995490
Penkov Vladimir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранить jspFragment между запросами
все запросто решается инклудами - я могу просто вынести обновляемый кусок в отдельную jsp и просто обработать ее. Но я хочу весь код писать в 1ом месте. финально я хочу, чтобы работал следующий код:

Код: java
1.
2.
3.
4.
5.
6.
<div id='panel-wrapper'>
  <tag:reloadablePanel id='panel'>
	Значение поля: ${someBean.field}
  </tag:reloadablePanel>
</div>
<input type='button' onclick='rpcUtils.invoke("some method", "param1");utils.reload("panel");'/>



при этом rpcUtils.invoke("some method"); обновит значение ${someBean.field}, а utils.reload обновит содержимое tag:reloadablePanel (с сервера вернется обновленный html)
...
Рейтинг: 0 / 0
12.10.2012, 13:20:54
    #37995498
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранить jspFragment между запросами
Penkov Vladimir,

я делал отдельный сервлет ДайМнеКусок, который аяксом вызывал и вставлял уже из JS на клиенте. На любое событие в Осле
...
Рейтинг: 0 / 0
12.10.2012, 13:22:01
    #37995502
Penkov Vladimir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранить jspFragment между запросами
соответственно, фрагмент "Значение поля: ${someBean.field}" нужно где-то хранить. вариантов несколько:
1. хранить ссылку на jspFragment. идеальный вариант, появляется возможность писать в теле тега всякие c:if и пр
2. писать тело фрагмента в виде freemarker шаблона (или любом другом шаблонном языке)
...
Рейтинг: 0 / 0
12.10.2012, 13:23:06
    #37995503
Penkov Vladimir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранить jspFragment между запросами
Petro123Penkov Vladimir,

я делал отдельный сервлет ДайМнеКусок, который аяксом вызывал и вставлял уже из JS на клиенте. На любое событие в Осле

это самый простой вариант, мне он не нужен, так как
1) код разбивается на части
2) помните, я вам обещал грид? вот это часть компонентного движка, с которой будет все прям вообще огонь
...
Рейтинг: 0 / 0
12.10.2012, 13:28:38
    #37995519
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранить jspFragment между запросами
Penkov Vladimir,
согласен.
Т.е. если это компонент, то - инкапсуляция - всё барахло внутри.
...
Рейтинг: 0 / 0
12.10.2012, 13:48:07
    #37995571
0FD
0FD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранить jspFragment между запросами
Penkov Vladimir,

тело выполняется в контексте страницы PageContext, значение тела может зависеть от других тегов выше, а сохранив JspFragment, Вы сохраняете только контекст не существующей уже страницы. Вы вообще пробовали сохранять JspFragment? а потом его выполнять или это только вопросы?
...
Рейтинг: 0 / 0
12.10.2012, 13:59:34
    #37995602
Penkov Vladimir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранить jspFragment между запросами
0FDPenkov Vladimir,

тело выполняется в контексте страницы PageContext, значение тела может зависеть от других тегов выше, а сохранив JspFragment, Вы сохраняете только контекст не существующей уже страницы. Вы вообще пробовали сохранять JspFragment? а потом его выполнять или это только вопросы?

вопросы. я вижу что каждый раз jspFragment создается новый.

в моем случае тег не может зависеть от тегов выше (если это так, то сам дурак)
...
Рейтинг: 0 / 0
12.10.2012, 14:10:32
    #37995640
0FD
0FD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранить jspFragment между запросами
Penkov Vladimirвопросы. я вижу что каждый раз jspFragment создается новый.

в моем случае тег не может зависеть от тегов выше (если это так, то сам дурак)

Это сейчас в tomcat, а завтра, например, будет всего один jspFragment на всю станицу, и будет такие вызовы jspFragment.setIdFragment(0000); xxx.setJspBody(jspFragment);.
читай javadoc:
Implementation Note: It is not necessary to generate a separate class for each fragment. One possible implementation is to generate a single helper class for each page that implements JspFragment. Upon construction, a discriminator can be passed to select which fragment that instance will execute.
...
Рейтинг: 0 / 0
12.10.2012, 14:23:54
    #37995676
Penkov Vladimir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранить jspFragment между запросами
я потому и спрашиваю, какие есть еще варианты
...
Рейтинг: 0 / 0
12.10.2012, 15:36:38
    #37995846
Penkov Vladimir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранить jspFragment между запросами
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / хранить jspFragment между запросами / 25 сообщений из 25, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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