Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
1 / 1 / 0
Регистрация: 20.10.2009
Сообщений: 66

Tree средствами HTML

26.03.2010, 11:21. Показов 1224. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно реализовать Tree на Web странице. Уже придумал алгоритм, осталось только реализовать представление на JSP. Но вот незадача - не хотется этот код встаивать в страницу - некрасиво. Думал через custom tags, но не знаю как ссылку на JavaBean отображаемого дерева передать обработчику своего тега. А может есть стандартное решение? Подскажите плиз...
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.03.2010, 11:21
Ответы с готовыми решениями:

Какими средствами написать конвертер DOC-HTML, HTML-DOC
Доброе время суток. Необходимо написать конвертер DOC-HTML, HTML-DOC. Как это сделать, ума не приложу. Есть идея использования регулярных...

Определить предикат maxelem(Tree, Max), чтобы Max равнялось наибольшему из чисел, входящих в дерево Tree
1# Определить предикат maxelem(Tree,Max) так , чтобы Max равнялось наибольшему из чисел, входящих в дерево Tree. 2# Запрограммируйте...

Tree.FullExpand; Tree.FullCollapse;
Я кладу на форму компонент TreeView и строю дерево. И мне нужно чтобы при двойном нажатии на элемент дерева в строковую переменную...

9
mishgun
26.03.2010, 20:53
<%@ include file='yourfile.html' %>
так не пойдет?
mishgun
27.03.2010, 01:07
Извиняюсь не совсем въехал в вопрос.
посмотрите на sourceforge.com там есть кастом таги на jacarta.apache.org
jsptags.com тоже гляньте но по моему это лишний геморрой идите обычным путем
1 / 1 / 0
Регистрация: 20.10.2009
Сообщений: 66
28.03.2010, 09:49  [ТС]
Все, сделал. Обошелся без стандартных тегов - написал свой. Одно плохо - после каждого клика на узле дерева при сворачивании-разворачивании приходится перегружать страницу. Ещё пока не решил как восстанавливть текущую ветвь дерева на старой позиции при перегрузке страницы если раскрываемый или закрываемый узел находится не в начале документа. Если кому интересно - могу объяснить поподробнее, поделиться исходниками.
0
3 / 3 / 3
Регистрация: 09.07.2008
Сообщений: 422
28.03.2010, 12:02
Держи hidden элемент для каждого узла
0
0 / 0 / 0
Регистрация: 26.05.2009
Сообщений: 81
28.03.2010, 14:03
to makem
поделись исходничками если не трудно...
на alekseymir@rambler.ru please
0
1 / 1 / 0
Регистрация: 20.10.2009
Сообщений: 66
28.03.2010, 17:26  [ТС]
to SVOLOCH: че-то не догнал, зачем hidden? Чтоб привязаться к нему, что ли?

А исходнички подготовлю и опубликую здесь (не в обиду, да?). Думаю всем будет интересно . К завтрему наверное управлюсь.
0
3 / 3 / 3
Регистрация: 09.07.2008
Сообщений: 422
29.03.2010, 14:13
Если реализовать дерево внутри тэга FORM, а клики на элементы дерева - как сабмит этой формы, причем для каждого узла держать hidden элемент, имеющий значение 'true' или 'false' в зависимости от текущего состояния узла, тогда при последующем построении дерева после сабмита ты всегда сможешь отобразить его так, как его развернул юзер. Могу исходничек скинуть, если что..
0
1 / 1 / 0
Регистрация: 20.10.2009
Сообщений: 66
29.03.2010, 15:32  [ТС]
Спасибо, понял. Но я пошел несколько другим путем. Далее увидите, скоро сброшу исходники с краткими комментариями. Ждите, у меня много работы...
0
1 / 1 / 0
Регистрация: 20.10.2009
Сообщений: 66
31.03.2010, 12:53  [ТС]
Выкладываю (все что знаю) Не осудите если где в чем то ошибся (но незначительно) ))))))))))))))))))).

Во-первых, все узлы и линии дерева отображаются графикой 20x20 пикселов (для теста в формате bmp).Принята такая сигнатура:
Для раскрытого узла
minusR.bmp (R - всегда отображается связь с иконкой узла)
minusRD.bmp (D - узел не последний на своем уровне)
Для закрытого узла
plusR.bmp
plusRD.bmp
Вертикальная линия без связей с узлами
lineV.bmp
Вертикальная линия с отображением связи с узлом у которого нет потомков
lineRD.bmp
Вертикальная линия с отображением связи с последним на своем уровне узлом у которого нет потомков
lineR.bmp
Графический табулятор ( заполнения пространства в глубину вложенности для строки)
empty.bmp

Далее привожу код custom taga

public class TreeTag extends TagSupport implements javax.servlet.jsp.tagext.TryCatchFinally {

private final String [] stages = {'circleRed.bmp',
'circleMagenta.bmp',
'circleBlue.bmp',
'circleGreen.bmp',
'circleBrown.bmp',
'circleBlack.bmp'};

// Кэш уровней связи (по коду станет ясно если так не понятно ))
Vector vCash = new Vector();
// Атрибуты
private String catalogName;
private String headValue;

public TreeTag() {
super();
}

public void otherDoStartTagOperations() {
try
{
JspWriter out = pageContext.getOut();
ServletRequest sr = pageContext.getRequest();

out.println('<table bgcolor=#cccccc width='100%' border='0' cellspacing='1' cellpadding='0' align='left' class='ttext'>');
out.print('<tr bgcolor='#cccccc'><th align='center'>');
out.print('Схема');
out.print('</th><th width='90%' align='left'>');
out.print('Позиции');
out.print('</th></tr>');
out.print('<tr><td bgcolor=#ffffff>');
out.print('<img src='/Images/circleYellow.bmp' alt='' border=0 hspace=0 vspace=0>');
out.print('</td><td bgcolor=#ffffff>');
out.print(headValue);
out.println('</td></tr>');
// Получить корневой каталог
Vector vCatalog = (Vector)sr.getAttribute(catalogName);
// прорисовка в глубину (рекурсия)
printNodes(vCatalog,out);
out.println('</table>');
out.flush();
}
catch (Exception ex)
{
System.out.print(ex.toString());
}
}

public boolean theBodyShouldBeEvaluated() {
return true;
}

public int doStartTag() throws JspException, JspException {
otherDoStartTagOperations();

if (theBodyShouldBeEvaluated()) {
return EVAL_BODY_INCLUDE;
} else {
return SKIP_BODY;
}
}

public int doEndTag() throws JspException, JspException {
otherDoEndTagOperations();

if (shouldEvaluateRestOfPageAfterEndTag()) {
return EVAL_PAGE;
} else {
return SKIP_PAGE;
}
}

// Геттеры sion>
<jsp-version>1.2</jsp-version>
<short-name>max</short-name>
<uri>/max</uri>
<display-name>max</display-name>
<description>A blank tag library template.
</description>
<tag>
<name>tree</name>
<tag-class>tags.max.TreeTag</tag-class>
<body-content>empty</body-content>
<description></description>
<tldx>
<packagename>tags.max</packagename>
<extendsSupportClass>TRUE</extendsSupportClass>
<supportClass>TagSupport</supportClass>
<implementsTryCatchFinally>TRUE</implementsTryCatchFinally>
<findparent>FALSE</findparent>
</tldx>
<attribute>
<name>catalog</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<type>String</type>
<tldx>
<javaVariable>catalogName</javaVariable>
<IsReferenceID>FALSE</IsReferenceID>
<ReferencesTag>FALSE</ReferencesTag>
<ReferenceScope>Session</ReferenceScope> <ReferencesTagReferentFirst>TRUE</ReferencesTagReferentFirst>
</tldx>
</attribute>
<attribute>
<name>head</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<type>String</type>
<tldx>
<javaVariable>headValue</javaVariable>
<defaultValue>'Заголовок'</defaultValue>
<IsReferenceID>FALSE</IsReferenceID>
<ReferencesTag>FALSE</ReferencesTag>
<ReferenceScope>Session</ReferenceScope>
<ReferencesTagType></ReferencesTagType>
<ReferencesTagVariable></ReferencesTagVariable>
<ReferencesTagReferentFirst>TRUE</ReferencesTagReferentFirst>
</tldx>
</attribute>
<example></example>
</tag>

</taglib>


Определение класса Node (узел дерева):

package srv;

import java.util.Vector;

public class Node
{
// Состояние узла
public static final int NODE_OPEN = 1;
public static final int NODE_CLOSE = 2;
// Cчетчик для идентификации каждого узла во время создания
private static int nodesCount=1;
// Имя узла
private String nodeName;
// Это для моих целей (для себя можете определить что угодно)
private String nodeCode;
// Ключ для поиска данного узла
private String nodeKey;
// Флаг наличия потомков
boolean isMulty = false;
// Текущее состояние
int keyState = NODE_CLOSE;
// Это тоже для своих целей
int keyLevel;
// Контейнер потомков
Vector childs = new Vector();

public Node(String nodeCode, String nodeName, int iLevel)
{
this.nodeCode = nodeCode;
this.nodeName = nodeName;
this.keyLevel = iLevel;
this.nodeKey = String.valueOf(nodesCount);
nodesCount++;
}

public String getName()
{
return nodeName;
}

public boolean isKeyEquals(String key)
{
if(key.equals(nodeKey)) return true;
return fa R> node32.setKey(Node.NODE_OPEN);

node31.addChild(new Node('25','Test 3.1.1',2));
node31.addChild(new Node('26','Test 3.1.2',2));
node.addChild(node31);

Node node321 = new Node('27','Test 3.2.1',2);

Node node3211 = new Node('28','Test 3.2.1.1',3);
node3211.addChild(new Node('29','Test 3.2.1.1.1',4));
node3211.addChild(new Node('30','Test 3.2.1.1.2',4));

node321.addChild(node3211);
node321.addChild(new Node('31','Test 3.2.1.2',3));

node32.addChild(node321);

node.addChild(node32);

catalog.add(node);

node = new Node('32','Test 4',0);
node.addChild(new Node('33','Test 4.1',1));
catalog.add(node);

node = new Node('34','Test 5',0);
node.addChild(new Node('35','Test 5.1',1));
catalog.add(node);
query.getRequest().setAttribute('testCat alog', catalog);

Вот пока и все. Как говорится если нет подходящего решения - используй рекурсию - в скольких случаях это выручало! Будут вопросы - пишите. Хотя мгновенного ответа не гарантирую - работы невпроворот.Пока
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.03.2010, 12:53
Помогаю со студенческими работами здесь

Как создать Tree - НЕ ОБЫЧНЫЙ, А как в XSI Render Tree или Maya
Помогите чем можете: ocx, примерами, деньгами :)

HTML-code средствами Qt
Доброго времени суток! Мне нужно получить HTML-код страницы средствами Qt по введенному URL. Желательно делать это без использования...

Изменение html средствами js
Здравствуйте! Хочу сразу предупредить, что я на форуме впервые и вообще новичок в программировании, так что не судите строго мою тупость....

Парсинг HTML средствами AS 3.0
Доброго времени суток. Начал я постигать премурости AS с постановки грандиозной задачи: вытащить данные из определённого тега span на...

Определить браузер средствами HTML
Пробую делать простенькие шаблоны, и вот на что напоролся: InternetExplorer выводит страницу так, как надо, а вот Chrome первую половину не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru