четверг, 11 февраля 2010 г.

Struts 2 и две submit кнопки в форме

На самом деле кнопок может быть и больше. Но именно столько мне необходимо было предоставить. Сценарий прост: надо произвести два разных действия по реакции на одну  иту же форму. обычными ресетами тут не обойтись. Поэтому встречаем костыль-решение, которое я взял отсюда (надеюсь автор не будет против на распространение такой нужной информации).


1. в кнопках пишем

<input type="submit" name="submitSave" value="Сохранить"/>
<input type="submit" name="submitCancel" value="Отмена"/>

2. в стратс экшене пишем

private boolean submitSave = false;
private boolean submitCancel = false;
   
public void setSubmitSave(boolean submitSave) {
    this.submitSave = true;
}
public void setSubmitCancel(boolean submitCancel) {
    this.submitCancel = true;
}

Вуаля, вот он костылек, в сеттерах. После этого можно юзать булеан филды и быть счастливым.



CSS будни

Очередная бородатая проблема с нормальным размещением контента на странице с использованием CSS. На этот раз было необходимо просто центрировать по вертикали один <div> внутри другого <div>'а. Совершенно простая задача, но решается через костыли (увы-увы, мой милый цсс, ты слишком идеален для нашего грязного мира).

Подходы которые не работают (и которые не следует даже пытаться реализовать):
  • аналогично центрированию по горизонтали margin-top: auto; margin-bottom: auto;
  • margin-top: 50%; даже при определенной высоте отца-контейнера приводит к каким-то рандомным скаканиям
Делать правильно нужно так:
  1. ставим у дива-отца position: relative; и не забываем задать его высоту.
  2. ставим у дива-сына position: absolute; и top: 50%;


понедельник, 1 февраля 2010 г.

Graphviz: начало

Да. Нелегко девелопить небольшой проект. Так и тянутся руки применять совершенно ненужные фичи чтобы поиграться с ними. Вот такова и история Graphviz в моей жизни. Так или иначе, о нем есть что рассказать.
Использовать Graphviz я решил по причине сильного нежелания генерить картинки диаграмм классов в какой-нить UML тулзе и потом вставлять эту картинку в вики проекта. Не хотелось при каждом изменении заново открывать диаграмму в тулзе, заново генерить картинку, заново ее вставлять в вики. Мне показалось, что данная последовательность действий - это, как говорят, overkill. Ведь я всего лишь хочу отобразить отношения между сущностями (оххохо). И для этого мне совершенно неважно как они будут расположены относительно друг друга. В случае с UML тулзой я решаю и эту ненужную задачу (конечно для красивых презентаций это задача нужна, но не в случае с вики). Примерно так же думали и разработчики Graphviz.

Для моей задачи я использовал не весь Graphviz, а только его подмодуль - dot.
Полезной оказалась статья http://www.ffnn.nl/pages/articles/media/uml-diagrams-using-graphviz-dot.php показывающая примеры использования DOT language для рисования диаграммы классов. В статье не показаны примеры различных типов стрелок (вы же помните эти глупые стрелки агрегации и композиции!), для этого юзаем параметр arrowhead.
Следует также помнить что для включения DOT маркапа в вики трака нужно поставить плагин, а в самой вики писать

{{{
#!graphviz

здесь ваш DOT-код

}}}

Вот как я стильно заюзал DOT для своей диаграмки

{{{
#!graphviz
digraph G {
node [
shape = "record"
]
Report->Message [arrowhead = diamond ]
FieldValue->Report [arrowhead = odiamond]
Field->ReportType [arrowhead = odiamond]
Field->FieldValue [arrowhead = diamond]
}
}}}

Trac: удовольствие разработки

Мдя, вот такой пафосный заголовок, но действительно интересно становится, когда упорядочиваешь проект с помощью Trac.

Немножко ознакомившись с Trac, начал искать разную инфу. Теперь мне пора закрывать все 50 открытых вкладок и поэтому решил сохранить все полезное в этом посте. Вот что получилось:
Кроме того нашел-таки способ рисовать диаграммы в вики с помощью маркапа:
  1. Ставим себе визуализатор http://www.graphviz.org
  2. Ставим плагин http://trac-hacks.org/wiki/GraphvizPlugin
  3. Наслаждаемся автоматическим рисованием стрелочек, кружочков и квадратиков по мановению руки.
Синтаксис для Graphviz весьма простой, но требуется время чтобы нагуглить то, что нужно. Поэтому в следующем посте размещу кое-что полезное по нему.

Trac: начало

На самом деле я имел удовольствие познакомиться с Trac уже давно. Однако знакомство то было мимолетным, оставив лишь приятное впечатление легкости интерфейса по сравнению с другими системами проджект менеджмента/баг трекинга.

По умолчанию следует думать, что в траке все замечательно. Исключения составляют следующие соображения:

  • на одном из форумов было указано на то, что из-за системы перекрестных ссылок в репозитории-вики-тикетах использование репозитория в другом проекте (например при создании форка проекта) приносит большие головные боли. Иными словами перекрестные ссылки создают связанность всех компонентов, которая очень удобна но только при сохранении целостности проекта.

  • я не нашел (пока) удобного варианта для быстрого редактирования хотя бы простых диаграмм в вики трака



При установке плагинов для windows версии трака следует проделать следующий костылек (найден в ридми BitNami Trac):

NOTE FOR WINDOWS USERS: Currently,
the easy_install Python script works a little funky
on Windows. We're already working on fixing it, but
installing Python eggs using the mentioned operating
systems needs a bit of extra tweaking. To install
a Trac plugin like WebAdmin, for example, you will
need to follow the guidelines available at
http://trac.edgewall.org/wiki/WebAdmin , and after
that, stop your servers using the Start Menu Shortcuts and copy

* python/DLLs
* python/Lib

folders to

* apache2/bin

overwriting its contents. That done, launch
the servers again and everything should work fine.