четверг, 16 августа 2012 г.
пятница, 25 мая 2012 г.
Повторившийся трекинг (repeated tracking)
Забавный случай только что произошел :)
Пару дней назад заказал на ебее (www.ebay.com) одну вещь, решил посмотреть через http://www.track-trace.com/ где там моя вещица.. ну вроде все в порядке:
Жму на вкладку, чтобы выбрать страну, выбираю, естественно "Рашу", и что же я вижу - оказывается, я уже получил свой товар еще в феврале 2011 :)
Раньше считал, что номера уникальны, ну или как минимум повторяются лет через 5, и старые повторы удаляются.
Что ж, и такое бывает как видно. Буду ждать.
Пару дней назад заказал на ебее (www.ebay.com) одну вещь, решил посмотреть через http://www.track-trace.com/ где там моя вещица.. ну вроде все в порядке:
Жму на вкладку, чтобы выбрать страну, выбираю, естественно "Рашу", и что же я вижу - оказывается, я уже получил свой товар еще в феврале 2011 :)
Раньше считал, что номера уникальны, ну или как минимум повторяются лет через 5, и старые повторы удаляются.
Что ж, и такое бывает как видно. Буду ждать.
среда, 29 февраля 2012 г.
Перевод числа в прописной вид (деньги, рубли)
Пришла необходимость добавить в систему отображение цифр, а конкретнее цен в счетах, в прописном виде.
т.е. "100.00" переводим в "Сто рублей 00 копеек."
Долго не мудрствуя обратился к Google'у. Наткнулся на простенький и тем привлекательный код автора называющего себя runcore. Спасибо ему большое. Абсолютно честно сплагиатил у него, немного изменив под себя.
Все что я до этого находил было либо перегружено возможностями, такими как отображение разных валют, и потому разбираться не особо хотелось. Либо код был настолько "быдло", что рассматривать его просто было противно.
Привожу код здесь.
/**
* Класс для работы с деньгами
* @author runcore
*/
import java.util.ArrayList;
import java.util.Collections;
import java.math.BigDecimal;
public class NumToStrMoney {
/**
* Сумма денег
*/
private BigDecimal amount;
/**
* Конструктор из Long
*/
public NumToStrMoney(long l) {
String s = String.valueOf(l);
if (!s.contains(".")) {
s += ".0";
}
this.amount = new BigDecimal(s);
}
/**
* Конструктор из Double
*/
public NumToStrMoney(double l) {
String s = String.valueOf(l);
if (!s.contains(".")) {
s += ".0";
}
this.amount = new BigDecimal(s);
}
/**
* Конструктор из String
*/
public NumToStrMoney(String s) {
if (!s.contains(".")) {
s += ".0";
}
this.amount = new BigDecimal(s);
}
/**
* Вернуть сумму как строку
*/
public String asString() {
return amount.toString();
}
/**
* Вернуть сумму прописью, с точностью до копеек
*/
public String num2str() {
return num2str(false);
}
/**
* Выводим сумму прописью
* @param stripkop boolean флаг - показывать копейки или нет
* @return String Сумма прописью
*/
public String num2str(boolean stripkop) {
String[][] sex = {
{"", "один", "два", "три", "четыре", "пять", "шесть", "семь", "восемь", "девять"},
{"", "одна", "две", "три", "четыре", "пять", "шесть", "семь", "восемь", "девять"},};
String[] str100 = {"", "сто", "двести", "триста", "четыреста", "пятьсот", "шестьсот", "семьсот", "восемьсот", "девятьсот"};
String[] str11 = {"", "десять", "одиннадцать", "двенадцать", "тринадцать", "четырнадцать", "пятнадцать", "шестнадцать", "семнадцать", "восемнадцать", "девятнадцать", "двадцать"};
String[] str10 = {"", "десять", "двадцать", "тридцать", "сорок", "пятьдесят", "шестьдесят", "семьдесят", "восемьдесят", "девяносто"};
String[][] forms = {
{"копейка", "копейки", "копеек", "1"},
{"рубль", "рубля", "рублей", "0"},
{"тысяча", "тысячи", "тысяч", "1"},
{"миллион", "миллиона", "миллионов", "0"},
{"миллиард", "миллиарда", "миллиардов", "0"},
{"триллион", "триллиона", "триллионов", "0"}, // можно добавлсть дальше секстиллионы и т.д.
};
// получаем отдельно рубли и копейки
long rub = amount.longValue();
String[] moi = amount.toString().split("\\.");
long kop = Long.valueOf(moi[1]);
if (!moi[1].substring(0, 1).equals("0")) {// начинаетсс не с нулс
if (kop < 10) {
kop *= 10;
}
}
String kops = String.valueOf(kop);
if (kops.length() == 1) {
kops = "0" + kops;
}
long rub_tmp = rub;
// Разбиватель суммы на сегменты по 3 цифры с конца
ArrayList segments = new ArrayList();
while (rub_tmp > 999) {
long seg = rub_tmp / 1000;
segments.add(rub_tmp - (seg * 1000));
rub_tmp = seg;
}
segments.add(rub_tmp);
Collections.reverse(segments);
// снализируем сегменты
String o = "";
if (rub == 0) {// если соль
o = "ноль " + morph(0, forms[1][0], forms[1][1], forms[1][2]);
if (stripkop) {
return o;
} else {
return o + " " + kop + " " + morph(kop, forms[0][0], forms[0][1], forms[0][2]);
}
}
// Больше нуля
int lev = segments.size();
for (int i = 0; i < segments.size(); i++) {// перебираем сегменты
int sexi = (int) Integer.valueOf(forms[lev][3].toString());// определсем род
int ri = (int) Integer.valueOf(segments.get(i).toString());// текущий сегмент
if (ri == 0 && lev > 1) {// если сегмент ==0 И не последний уровень(там Units)
lev--;
continue;
}
String rs = String.valueOf(ri); // число в строку
// нормализация
if (rs.length() == 1) {
rs = "00" + rs;// два нулика в префикс?
}
if (rs.length() == 2) {
rs = "0" + rs; // или лучше один?
}// получаем циферки длс анализа
int r1 = (int) Integer.valueOf(rs.substring(0, 1)); //первас цифра
int r2 = (int) Integer.valueOf(rs.substring(1, 2)); //вторас
int r3 = (int) Integer.valueOf(rs.substring(2, 3)); //третьс
int r22 = (int) Integer.valueOf(rs.substring(1, 3)); //вторас и третьс
// Супер-нано-анализатор циферок
if (ri > 99) {
o += str100[r1] + " "; // Сотни
}
if (r22 > 20) {// >20
o += str10[r2] + " ";
o += sex[sexi][r3] + " ";
} else { // <=20
if (r22 > 9) {
o += str11[r22 - 9] + " "; // 10-20
} else {
o += sex[sexi][r3] + " "; // 0-9
}
}
// Единицы измерения (рубли...)
o += morph(ri, forms[lev][0], forms[lev][1], forms[lev][2]) + " ";
lev--;
}
// Копейки в цифровом виде
if (stripkop) {
o = o.replaceAll(" {2,}", " ");
} else {
o = o + "" + kops + " " + morph(kop, forms[0][0], forms[0][1], forms[0][2]);
o = o.replaceAll(" {2,}", " ");
}
return o;
}
/**
* Склонсем словоформу
* @param n Long количество объектов
* @param f1 String вариант словоформы длс одного объекта
* @param f2 String вариант словоформы длс двух объектов
* @param f5 String вариант словоформы длс псти объектов
* @return String правильный вариант словоформы длс указанного количества объектов
*/
public static String morph(long n, String f1, String f2, String f5) {
n = Math.abs(n) % 100;
long n1 = n % 10;
if (n > 10 && n < 20) {
return f5;
}
if (n1 > 1 && n1 < 5) {
return f2;
}
if (n1 == 1) {
return f1;
}
return f5;
}
public static void main(String[] args) {
NumToStrMoney ntsm = new NumToStrMoney(15555.48);
System.out.println(ntsm.asString());
System.out.println(ntsm.num2str(true));
System.out.println(ntsm.num2str());
}
}
В трейсе после запуска получим следующее
Что обычно и требуется дл небольших проектов.
т.е. "100.00" переводим в "Сто рублей 00 копеек."
Долго не мудрствуя обратился к Google'у. Наткнулся на простенький и тем привлекательный код автора называющего себя runcore. Спасибо ему большое. Абсолютно честно сплагиатил у него, немного изменив под себя.
Все что я до этого находил было либо перегружено возможностями, такими как отображение разных валют, и потому разбираться не особо хотелось. Либо код был настолько "быдло", что рассматривать его просто было противно.
Привожу код здесь.
/**
* Класс для работы с деньгами
* @author runcore
*/
import java.util.ArrayList;
import java.util.Collections;
import java.math.BigDecimal;
public class NumToStrMoney {
/**
* Сумма денег
*/
private BigDecimal amount;
/**
* Конструктор из Long
*/
public NumToStrMoney(long l) {
String s = String.valueOf(l);
if (!s.contains(".")) {
s += ".0";
}
this.amount = new BigDecimal(s);
}
/**
* Конструктор из Double
*/
public NumToStrMoney(double l) {
String s = String.valueOf(l);
if (!s.contains(".")) {
s += ".0";
}
this.amount = new BigDecimal(s);
}
/**
* Конструктор из String
*/
public NumToStrMoney(String s) {
if (!s.contains(".")) {
s += ".0";
}
this.amount = new BigDecimal(s);
}
/**
* Вернуть сумму как строку
*/
public String asString() {
return amount.toString();
}
/**
* Вернуть сумму прописью, с точностью до копеек
*/
public String num2str() {
return num2str(false);
}
/**
* Выводим сумму прописью
* @param stripkop boolean флаг - показывать копейки или нет
* @return String Сумма прописью
*/
public String num2str(boolean stripkop) {
String[][] sex = {
{"", "один", "два", "три", "четыре", "пять", "шесть", "семь", "восемь", "девять"},
{"", "одна", "две", "три", "четыре", "пять", "шесть", "семь", "восемь", "девять"},};
String[] str100 = {"", "сто", "двести", "триста", "четыреста", "пятьсот", "шестьсот", "семьсот", "восемьсот", "девятьсот"};
String[] str11 = {"", "десять", "одиннадцать", "двенадцать", "тринадцать", "четырнадцать", "пятнадцать", "шестнадцать", "семнадцать", "восемнадцать", "девятнадцать", "двадцать"};
String[] str10 = {"", "десять", "двадцать", "тридцать", "сорок", "пятьдесят", "шестьдесят", "семьдесят", "восемьдесят", "девяносто"};
String[][] forms = {
{"копейка", "копейки", "копеек", "1"},
{"рубль", "рубля", "рублей", "0"},
{"тысяча", "тысячи", "тысяч", "1"},
{"миллион", "миллиона", "миллионов", "0"},
{"миллиард", "миллиарда", "миллиардов", "0"},
{"триллион", "триллиона", "триллионов", "0"}, // можно добавлсть дальше секстиллионы и т.д.
};
// получаем отдельно рубли и копейки
long rub = amount.longValue();
String[] moi = amount.toString().split("\\.");
long kop = Long.valueOf(moi[1]);
if (!moi[1].substring(0, 1).equals("0")) {// начинаетсс не с нулс
if (kop < 10) {
kop *= 10;
}
}
String kops = String.valueOf(kop);
if (kops.length() == 1) {
kops = "0" + kops;
}
long rub_tmp = rub;
// Разбиватель суммы на сегменты по 3 цифры с конца
ArrayList segments = new ArrayList();
while (rub_tmp > 999) {
long seg = rub_tmp / 1000;
segments.add(rub_tmp - (seg * 1000));
rub_tmp = seg;
}
segments.add(rub_tmp);
Collections.reverse(segments);
// снализируем сегменты
String o = "";
if (rub == 0) {// если соль
o = "ноль " + morph(0, forms[1][0], forms[1][1], forms[1][2]);
if (stripkop) {
return o;
} else {
return o + " " + kop + " " + morph(kop, forms[0][0], forms[0][1], forms[0][2]);
}
}
// Больше нуля
int lev = segments.size();
for (int i = 0; i < segments.size(); i++) {// перебираем сегменты
int sexi = (int) Integer.valueOf(forms[lev][3].toString());// определсем род
int ri = (int) Integer.valueOf(segments.get(i).toString());// текущий сегмент
if (ri == 0 && lev > 1) {// если сегмент ==0 И не последний уровень(там Units)
lev--;
continue;
}
String rs = String.valueOf(ri); // число в строку
// нормализация
if (rs.length() == 1) {
rs = "00" + rs;// два нулика в префикс?
}
if (rs.length() == 2) {
rs = "0" + rs; // или лучше один?
}// получаем циферки длс анализа
int r1 = (int) Integer.valueOf(rs.substring(0, 1)); //первас цифра
int r2 = (int) Integer.valueOf(rs.substring(1, 2)); //вторас
int r3 = (int) Integer.valueOf(rs.substring(2, 3)); //третьс
int r22 = (int) Integer.valueOf(rs.substring(1, 3)); //вторас и третьс
// Супер-нано-анализатор циферок
if (ri > 99) {
o += str100[r1] + " "; // Сотни
}
if (r22 > 20) {// >20
o += str10[r2] + " ";
o += sex[sexi][r3] + " ";
} else { // <=20
if (r22 > 9) {
o += str11[r22 - 9] + " "; // 10-20
} else {
o += sex[sexi][r3] + " "; // 0-9
}
}
// Единицы измерения (рубли...)
o += morph(ri, forms[lev][0], forms[lev][1], forms[lev][2]) + " ";
lev--;
}
// Копейки в цифровом виде
if (stripkop) {
o = o.replaceAll(" {2,}", " ");
} else {
o = o + "" + kops + " " + morph(kop, forms[0][0], forms[0][1], forms[0][2]);
o = o.replaceAll(" {2,}", " ");
}
return o;
}
/**
* Склонсем словоформу
* @param n Long количество объектов
* @param f1 String вариант словоформы длс одного объекта
* @param f2 String вариант словоформы длс двух объектов
* @param f5 String вариант словоформы длс псти объектов
* @return String правильный вариант словоформы длс указанного количества объектов
*/
public static String morph(long n, String f1, String f2, String f5) {
n = Math.abs(n) % 100;
long n1 = n % 10;
if (n > 10 && n < 20) {
return f5;
}
if (n1 > 1 && n1 < 5) {
return f2;
}
if (n1 == 1) {
return f1;
}
return f5;
}
public static void main(String[] args) {
NumToStrMoney ntsm = new NumToStrMoney(15555.48);
System.out.println(ntsm.asString());
System.out.println(ntsm.num2str(true));
System.out.println(ntsm.num2str());
}
}
В трейсе после запуска получим следующее
run-main:
15555.48
пятнадцать тысяч пятьсот пятьдесят пять рублей
пятнадцать тысяч пятьсот пятьдесят пять рублей 48 копеек
15555.48
пятнадцать тысяч пятьсот пятьдесят пять рублей
пятнадцать тысяч пятьсот пятьдесят пять рублей 48 копеек
Что обычно и требуется дл небольших проектов.
пятница, 20 января 2012 г.
Drift innovation HD170 stealth - битый пиксель
Приобрел на днях этот девайс, для записи своих покатушек на борде. Начал тестировать, и увидел на видео что-то наподобие битого пикселя. Сначала подумал, что это на мониторе. Оказалось, что битый пиксель присутствует на матрице которая принимает изображение.
Немного погуглил и нашел решение - помогло, пиксель исчез.
Делюсь методом.
Нужно просто напросто обновить прошивку камеры. Прошивку можно скачать здесь. Там же есть и способы прошивки для других камер от Drift. Прошить очень просто.
HD170 stealth прошивается так:
- Скопируйте скачанный файл в корневой каталог пустой и отформатированной SD-карты памяти. ВАЖНО: не переименовывайте файл.
- Вставьте карту памяти в камеру и включите питание. Убедитесь, что у камеры достаточный уровень заряда аккумулятора и процесс обновления прошивки не прервется на полпути.
- Выберите в меню Setup последний пункт с номером версии прошивки и подтвердите выбор.
- Выберите галочку и кликните на нее, подтверждая выбор.
- Светодиод на камере во время процесса будет мигать, а на экране будет надпись "Wait for FW update". По окончании процесса камера выключится.
- Включите камеру и проверьте, что прошивка была обновлена.
- Отформатируйте карту памяти при помощи меню камеры.
После прошивки, как пишут на форумах, этот битый пиксель "исчезает" благодаря его окрашиванию на видео в цвет близкий к ближайшим пикселям. И получается, что его как бы и нет. И пользователь даже не догадывается что он там есть/был.
понедельник, 31 октября 2011 г.
iphone и переход на зимнее время.
Как и многие владельцы iphone 4 столкнулся с проблемой отмены перехода на зимнее время.
Суть в том, что при включении iTunes при подключеном iphone у одних время переходит на час вперед у других на час назад, в общем - полный бардак.
Немного порывшись в инете, нашел версию решения, связанную с выставлением часовых поясов в Windows и на iphone.
Так как я нахожусь в г.Пермь, у меня и было в телефоне выставлено - Пермь.
В Windows же Перми нет, поэтому там стоит Екатеринбург. Включай, не включай функцию автоматически выбирать время в настройках на iphone, ничего не выйдет - он упорно будет ставить время на час назад.
В итоге решил вопрос следующим образом:
Выставил в Windows пояс (UTC+05:00) Исламабад, Карачи.
Выбрал в iphone Исламабад, Пакистан
Естественно Windows автоматом выставила часы на час назад, что я сразу же вручную исправил.
Подключил iphone, включил iTunes и хоп - все встало так как надо.
Единственный минус, который я вижу, это синхронизация времени с интернетом в Windows, которую придется отключить, ибо с Пермским временем оно не совпадает.
Суть в том, что при включении iTunes при подключеном iphone у одних время переходит на час вперед у других на час назад, в общем - полный бардак.
Немного порывшись в инете, нашел версию решения, связанную с выставлением часовых поясов в Windows и на iphone.
Так как я нахожусь в г.Пермь, у меня и было в телефоне выставлено - Пермь.
В Windows же Перми нет, поэтому там стоит Екатеринбург. Включай, не включай функцию автоматически выбирать время в настройках на iphone, ничего не выйдет - он упорно будет ставить время на час назад.
В итоге решил вопрос следующим образом:
Выставил в Windows пояс (UTC+05:00) Исламабад, Карачи.
Выбрал в iphone Исламабад, Пакистан
Естественно Windows автоматом выставила часы на час назад, что я сразу же вручную исправил.
Подключил iphone, включил iTunes и хоп - все встало так как надо.
Единственный минус, который я вижу, это синхронизация времени с интернетом в Windows, которую придется отключить, ибо с Пермским временем оно не совпадает.
суббота, 8 октября 2011 г.
Запуск Eclipse Indigo на Windows 7
Относительно долго решал вопрос с такой элементарной задачей как запуск Eclipse под Window 7 на своей домашней машинке. Поэтому оставляю маленькую заметку по этому поводу.
И так.
Скачиваем архив с Eclipse, распаковываем в какую-нибудь папку. Обычно для программ, которые запускаются без установки я создаю на диске C папку Programs и копирую их в нее.
Распаковали архив, получили следующее положение программы:
C:\Programs\eclipse\
Пытаемся запустить файл eclipse.exe и сразу получаем ошибку:

Не может Eclipse найти папку с нужными библиотеками JRE.
Чтобы ему помочь можно прописать путь к JRE в переменную окружения PATH.
Но мне больше нравится другое решение:
Рядом с файлом запуска лежит файл конфигурации Eclipse - eclipse.ini
В нем добавляем пару строк:
-vm
../../../Program Files/Java/jre7/bin/javaw.exe
Если вдруг кто не в курсе - две точки подряд означают переход на директорию выше.
А так как файл запуска Eclipse находится по пути C:\Programs\eclipse , то и пишем две точки трижды.
Теперь Eclipse запускается и можно приступать непосредственно к программированию :)
И так.
Скачиваем архив с Eclipse, распаковываем в какую-нибудь папку. Обычно для программ, которые запускаются без установки я создаю на диске C папку Programs и копирую их в нее.
Распаковали архив, получили следующее положение программы:
C:\Programs\eclipse\
Пытаемся запустить файл eclipse.exe и сразу получаем ошибку:
Не может Eclipse найти папку с нужными библиотеками JRE.
Чтобы ему помочь можно прописать путь к JRE в переменную окружения PATH.
Но мне больше нравится другое решение:
Рядом с файлом запуска лежит файл конфигурации Eclipse - eclipse.ini
В нем добавляем пару строк:
-vm
../../../Program Files/Java/jre7/bin/javaw.exe
Если вдруг кто не в курсе - две точки подряд означают переход на директорию выше.
А так как файл запуска Eclipse находится по пути C:\Programs\eclipse , то и пишем две точки трижды.
Теперь Eclipse запускается и можно приступать непосредственно к программированию :)
среда, 28 сентября 2011 г.
Ext GWT в Eclipse, с последующим запуском на Tomcat 7
Пару дней назад, вынуждено появилось свободное время и дабы не тратить его попусту, решил начать осваивать новый для меня веб-фреймворк java - Ext GWT.
Обычно я работаю в IDE Netbeans, но давно поглядывал в сторону Eclipse'a.
И так начнем по порядку:
1. Для того чтобы создать простенький проект в Eclipse с использованием Ext GWT, необходимо установить плагины для работы с GWT. Какие именно и как это сделать, смотрим здесь.
В статье выберите ссылку на детальное описание добавления плагинов (с картинками :)), в зависимости от версии вашего Eclipse'a
2. Добавим Ext GWT в Eclipse. Скачиваем последнюю версию Ext GWT (другое название - GXT). Распаковываем в любую папку на ваше усмотрение.
Запускаем Eclipse переходим в меню Window -> Preferences. В открывшемся окне в списке слева выбираем Java -> Build Path -> User Libraries.
Жмем кнопку New, пишем название, логично написать GXT, жмем ок.
Теперь добавим в нашу библиотеку необходимые jar-файлы. Жмем Add jaRs...
Переходим в распакованную папку Ext GWT и выбираем там jar с именем "gxt-2.2.5-gwt22.jar"
3. Создадим новый проект. File -> New -> Web Application Project.
введем его имя, например, Nix. Укажем имя пакета "главного" пакета. Проверим Google SDK, тот ли выбран по-умолчанию, который нам нужен. Уберем галочку с Use Google App Engine, ведь он нам не нужен, так как проект будет запускаться в Tomcat.
Жмем Finish. Проект создан.
4. Добавим в проект нашу библиотеку GXT. Для этого щелкаем правой кнопкой по корневой папке проекта и выбираем самый нижний пункт Properties. В открывшемся окне выбираем в списке слева Java Build Path.
Справа выбираем вкладку Librires и жмем Add Library, выбираем пункт User Library, жмем Next и ставим галочку напротив нашей GXT. Finish. Получаем такую картину:
5. Из распакованой папки GXT скопируем папку "resources" и положим ее в папку проекта war. Есть сомнения, на счет того, что название war есть стандартное (вроде как я где-то это прописал, но уже не помню). Ориентируемся на папку в которой лежит папку WEB-INF, рядом с ней и кладем "resources". Вот изображение структуры проекта:
6. Добавим пару обязательных строк в несколько файлов.
а. Автоматически созданный файл в главном пакете Nix.gwt.xml
В него добавим строку
<inherits name="com.extjs.gxt.ui.GXT" />
сразу после
<!-- Other module inherits -->
б. В файле Nix.html добавим пару строк:
<link rel='stylesheet' type='text/css' href='resources/css/gxt-all.css' />
и
<script language='javascript' src='resources/flash/swfobject.js'></script>
7. Откроем файл Nix.java, его можно найти в пакете com.nix.main.client
Отредактируем его оставив лишь:
package com.nix.main.client;
import com.extjs.gxt.ui.client.widget.MessageBox;
import com.google.gwt.core.client.EntryPoint;
/**
* Entry point classes define <code>onModuleLoad()</code>.
*/
public class Nix implements EntryPoint {
@Override public void onModuleLoad() {
MessageBox.info("Message", "Hello World!!", null);
}
}
П.С. Файлы из пакета com.nix.main.client кроме Nix.java можно удалить. Надо заметить, что информация о них автоматически удалится из WEB-INF/web.xml , что есть хорошо, ибо не нужно делать это вручную.
П.П.С В дальнейшем очень желательно написать скрипт сборки для Ant и собирать проект сразу же в папку веб-сервера или контейнера сервлетов. Хотя на первом этапе и при небольшом проекте можно просто копировать файлы каким-нибудь шеллом, наподобие far или mc.
Обычно я работаю в IDE Netbeans, но давно поглядывал в сторону Eclipse'a.
И так начнем по порядку:
1. Для того чтобы создать простенький проект в Eclipse с использованием Ext GWT, необходимо установить плагины для работы с GWT. Какие именно и как это сделать, смотрим здесь.
В статье выберите ссылку на детальное описание добавления плагинов (с картинками :)), в зависимости от версии вашего Eclipse'a
2. Добавим Ext GWT в Eclipse. Скачиваем последнюю версию Ext GWT (другое название - GXT). Распаковываем в любую папку на ваше усмотрение.
Запускаем Eclipse переходим в меню Window -> Preferences. В открывшемся окне в списке слева выбираем Java -> Build Path -> User Libraries.
Жмем кнопку New, пишем название, логично написать GXT, жмем ок.
Теперь добавим в нашу библиотеку необходимые jar-файлы. Жмем Add jaRs...
Переходим в распакованную папку Ext GWT и выбираем там jar с именем "gxt-2.2.5-gwt22.jar"
3. Создадим новый проект. File -> New -> Web Application Project.
введем его имя, например, Nix. Укажем имя пакета "главного" пакета. Проверим Google SDK, тот ли выбран по-умолчанию, который нам нужен. Уберем галочку с Use Google App Engine, ведь он нам не нужен, так как проект будет запускаться в Tomcat.
Жмем Finish. Проект создан.
4. Добавим в проект нашу библиотеку GXT. Для этого щелкаем правой кнопкой по корневой папке проекта и выбираем самый нижний пункт Properties. В открывшемся окне выбираем в списке слева Java Build Path.
Справа выбираем вкладку Librires и жмем Add Library, выбираем пункт User Library, жмем Next и ставим галочку напротив нашей GXT. Finish. Получаем такую картину:
5. Из распакованой папки GXT скопируем папку "resources" и положим ее в папку проекта war. Есть сомнения, на счет того, что название war есть стандартное (вроде как я где-то это прописал, но уже не помню). Ориентируемся на папку в которой лежит папку WEB-INF, рядом с ней и кладем "resources". Вот изображение структуры проекта:
6. Добавим пару обязательных строк в несколько файлов.
а. Автоматически созданный файл в главном пакете Nix.gwt.xml
В него добавим строку
<inherits name="com.extjs.gxt.ui.GXT" />
сразу после
<!-- Other module inherits -->
б. В файле Nix.html добавим пару строк:
<link rel='stylesheet' type='text/css' href='resources/css/gxt-all.css' />
и
<script language='javascript' src='resources/flash/swfobject.js'></script>
7. Откроем файл Nix.java, его можно найти в пакете com.nix.main.client
Отредактируем его оставив лишь:
package com.nix.main.client;
import com.extjs.gxt.ui.client.widget.MessageBox;
import com.google.gwt.core.client.EntryPoint;
/**
* Entry point classes define <code>onModuleLoad()</code>.
*/
public class Nix implements EntryPoint {
@Override public void onModuleLoad() {
MessageBox.info("Message", "Hello World!!", null);
}
}
8. Откомпилируем проект щелкнув по нему правой кнопкой мыши и выбрав в меню Google -> GWT Compile. Насколько я понял это нужно сделать лишь один раз, для того, чтобы в папку war упали необходимые файлы GWT. В дальнейшем, при редактировании файлов, Eclipse автоматически обновляет папку war.
9. Берем папку war и копируем ее в папку webapps Tomcat'a. переименуем ее в nix.
Теперь наше приложение открывается в любом браузере по адресу http://localhost:8080/nix/
Конечно же все зависит от настроек вашего Tomcat.
П.С. Файлы из пакета com.nix.main.client кроме Nix.java можно удалить. Надо заметить, что информация о них автоматически удалится из WEB-INF/web.xml , что есть хорошо, ибо не нужно делать это вручную.
П.П.С В дальнейшем очень желательно написать скрипт сборки для Ant и собирать проект сразу же в папку веб-сервера или контейнера сервлетов. Хотя на первом этапе и при небольшом проекте можно просто копировать файлы каким-нибудь шеллом, наподобие far или mc.
Подписаться на:
Сообщения
(
Atom
)







