<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-9181518947198443407</id><updated>2011-04-22T00:15:50.186+03:00</updated><category term='outlook'/><category term='gwt'/><category term='tomcat'/><category term='eclipse'/><category term='jasper'/><category term='ant'/><category term='reports'/><category term='ireport'/><category term='button'/><category term='viktex'/><title type='text'>GWT - Легко и просто</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://gwt-rus.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9181518947198443407/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://gwt-rus.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Viktor Zaprudnev</name><uri>http://www.blogger.com/profile/17836965695137615226</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://3.bp.blogspot.com/_ON7OSu7G6NA/SQzf1Cc0MSI/AAAAAAAAAJA/BFPE9ILosjI/S220/l1180507038319.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>4</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-9181518947198443407.post-912709482918915026</id><published>2009-02-11T00:08:00.007+02:00</published><updated>2009-02-11T00:13:31.387+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gwt'/><title type='text'>Почему gwt date picker медленно работает (тормозит)</title><content type='html'>&lt;h3 class="post-title entry-title"&gt; &lt;a href="http://gwtfuse.blogspot.com/2009/02/why-gwt-date-picker-is-too-slow.html"&gt;&lt;/a&gt; &lt;/h3&gt;Недавно я обнаружил, что GWT DatePicker (из инкубатора) заметно притормаживает под Firefox. Заметно - я имею ввиду - на любой клик приходиться ждать порядка 5 сек.&lt;br /&gt;&lt;br /&gt;Самое удивительное, что та же самая апликация работала на других машинках как заводная. При этом, заметил, что торможение бывает только под Firefox, но без разници, на какой версии. &amp;nbsp; &lt;br /&gt;Оказывается, что причиной этому был FireBug плагин для firefox. Когда я его отключил, апликация заработала как положено. Надеюсь, если вы сталкнетесь с этим, отключение FireBag вам поможет!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9181518947198443407-912709482918915026?l=gwt-rus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gwt-rus.blogspot.com/feeds/912709482918915026/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9181518947198443407&amp;postID=912709482918915026' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9181518947198443407/posts/default/912709482918915026'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9181518947198443407/posts/default/912709482918915026'/><link rel='alternate' type='text/html' href='http://gwt-rus.blogspot.com/2009/02/gwt-date-picker.html' title='Почему gwt date picker медленно работает (тормозит)'/><author><name>Viktor Zaprudnev</name><uri>http://www.blogger.com/profile/17836965695137615226</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://3.bp.blogspot.com/_ON7OSu7G6NA/SQzf1Cc0MSI/AAAAAAAAAJA/BFPE9ILosjI/S220/l1180507038319.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9181518947198443407.post-1416425070627376104</id><published>2008-11-12T20:45:00.025+02:00</published><updated>2008-11-12T22:38:30.736+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gwt'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='ant'/><category scheme='http://www.blogger.com/atom/ns#' term='ireport'/><category scheme='http://www.blogger.com/atom/ns#' term='viktex'/><category scheme='http://www.blogger.com/atom/ns#' term='tomcat'/><category scheme='http://www.blogger.com/atom/ns#' term='jasper'/><category scheme='http://www.blogger.com/atom/ns#' term='reports'/><title type='text'>GWT (GWT-EXT) + JasperReports быстро и просто.</title><content type='html'>&lt;div&gt;&lt;strong&gt;Часть первая, как все началось&lt;/strong&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:times new roman;"&gt;&lt;/span&gt; &lt;/div&gt;&lt;div&gt;&lt;span style="font-family:times new roman;"&gt;Вы энтузиаст новых инновационных технологий, разрабатываете корпоративное решение на Google Web Toolkit (GWT), но вот однажды в третьем часу ночи из бани звонит вам клиент, и сообщает,что зайдет днем пообщаться насчет работы с отчетами. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:times new roman;"&gt;Какие еще отчеты, вон какие симпатичные панельки, окошки, кнопочки думаете вы. Но вспомнив, что клиенто-ориентированность это хорошо, решаем ввести клиента в восторг. &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;Начнем, как водится, с постановки задачи. &lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div align="justify"&gt;&lt;strong&gt;Постановка задачи &lt;/strong&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;span style="font-family:times new roman;"&gt;Задача у нас не очень сложная, но вместе с тем не совсем тривиальная – создать прототип запуска, просмотра отчетов, а также уметь экспортировать в различные форматы. &lt;/span&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div align="justify"&gt;&lt;strong&gt;Вам понадобится&lt;br /&gt;&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;span style="font-family:times new roman;"&gt;Чтобы собрать приложение своими руками, вам понадобятся следующие инструменты: &lt;/span&gt;&lt;/div&gt;&lt;ol&gt;&lt;li&gt;&lt;div align="justify"&gt;&lt;span style="font-family:times new roman;"&gt;Eclipse IDE - &lt;/span&gt;&lt;a href="http://www.eclipse.org/downloads/"&gt;&lt;span style="font-family:times new roman;"&gt;http://www.eclipse.org/downloads/&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:times new roman;"&gt; &lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="justify"&gt;&lt;span style="font-family:times new roman;"&gt;Google Web Toolkit - &lt;/span&gt;&lt;a href="http://code.google.com/webtoolkit/gettingstarted.html"&gt;&lt;span style="font-family:times new roman;"&gt;http://code.google.com/webtoolkit/gettingstarted.html&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="justify"&gt;&lt;span style="font-family:times new roman;"&gt;JasperReports - &lt;/span&gt;&lt;a href="http://www.jaspersoft.com/"&gt;&lt;span style="font-family:times new roman;"&gt;http://www.jaspersoft.com/&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="justify"&gt;&lt;span style="font-family:times new roman;"&gt;iReport - &lt;/span&gt;&lt;a href="http://ireport.sourceforge.net/"&gt;&lt;span style="font-family:times new roman;"&gt;http://ireport.sourceforge.net/&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:times new roman;"&gt; &lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="justify"&gt;&lt;span style="font-family:times new roman;"&gt;Tomcat 5.x/6 - &lt;/span&gt;&lt;a href="http://tomcat.apache.org/"&gt;&lt;span style="font-family:times new roman;"&gt;http://tomcat.apache.org/&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:times new roman;"&gt; &lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="justify"&gt;&lt;span style="font-family:times new roman;"&gt;Ant - &lt;/span&gt;&lt;a href="http://ant.apache.org/"&gt;&lt;span style="font-family:times new roman;"&gt;http://ant.apache.org/&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:times new roman;"&gt; &lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="justify"&gt;&lt;span style="font-family:times new roman;"&gt;Gwt (Gwt-Ext) приложение :)&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;span style="font-family:times new roman;"&gt;&lt;strong&gt;&lt;span style="font-family:arial;"&gt;Немного о JasperReports&lt;/span&gt; &lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-family:times new roman;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:times new roman;"&gt;JasperReports один из популярных Open Source библиотек для создания отчетов. Очень просто интегрируется в любые Java аппликации. &lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;img id="BLOGGER_PHOTO_ID_5267864610326791250" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 320px; CURSOR: hand; HEIGHT: 252px; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_cJRcq0RQPpM/SRs28-dhRFI/AAAAAAAAADY/A_EmP4OpBzs/s320/image001.png" border="0" /&gt;&lt;span style="font-family:times new roman;"&gt;Отчеты описываются в формате XML, что в последующем возможно создание отчетов на базе шаблонов, использую Velocity (&lt;/span&gt;&lt;a href="http://velocity.apache.org/"&gt;&lt;span style="font-family:times new roman;"&gt;http://velocity.apache.org/&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:times new roman;"&gt;), Jelly (&lt;/span&gt;&lt;a href="http://commons.apache.org/jelly/"&gt;&lt;span style="font-family:times new roman;"&gt;http://commons.apache.org/jelly/&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:times new roman;"&gt;) или другие инструментарии. Файлы имеют расширение *.jrxml. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-family:times new roman;"&gt;Далее файл отчета компилируется, и на выходе получаем файлы *.jasper. &lt;/span&gt;&lt;span style="font-family:times new roman;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:times new roman;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="center"&gt;&lt;span style="font-family:times new roman;"&gt;JasperCompileManager.compileReportToFile("WebappReport.jrxml");&lt;/span&gt;&lt;/p&gt;&lt;span style="font-family:times new roman;"&gt;&lt;p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:times new roman;"&gt;В некоторых случаях это удобно, так как дает возможность в эксплуатации поставлять клиентам готовый отчет, а не исходники его.&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-family:times new roman;"&gt;После этого отчет запускается с помощью JasperFillManager.fillReport() в результате получаем JasperPrint объект, также возможно сохранить в файл.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-family:times new roman;"&gt;В конце используя один из классов JexcelApiExporter, JexcelApiExporterNature, JexcelApiExporterParameter, JRCsvExporter, JRGraphics2Dexporter, JRHtmlExporter, JRPdfExporter, JRPrintServiceExporter, JRRtfExporter, JRTextExporter, JRXlsExporter, JRXmlExporter можем экспортировать отчет в любой из данных форматов.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-family:times new roman;"&gt;&lt;strong&gt;Прототип приложения&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-family:times new roman;"&gt;Для примера взят протип приложения GWT-Ext Showcase2, переделанный в рамках требований клиента.&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;span style="font-family:times new roman;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;img id="BLOGGER_PHOTO_ID_5267865792805577330" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; HEIGHT: 328px; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_cJRcq0RQPpM/SRs4BzibonI/AAAAAAAAADg/HHwf8bKM6Qw/s400/image003.png" border="0" /&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;Когда мы кликаем “Logined users”, информация разворачивается в новом табе, показывая детали. Пока все просто и ясно? Теперь все по порядку. &lt;/span&gt;&lt;span style="font-family:times new roman;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:times new roman;"&gt;&lt;p&gt;&lt;strong&gt;Первый шаг&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Итак, перво-наперво поработаем с Jasper и создадим сам отчет&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Имеем jasperreports-3.1.2-project.zip, разархивируем его в C:\demo\jasper. Находим в директории “demo\samples\webapp” (отличный пример для запуска отчетов под web) отчет WebappReport.jrxml&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Далее используя iReport подправляем отчет под наши нужды, заменяем заголовок отчета, а также настраиваем JDBC DataSource и Report Query.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;&lt;img id="BLOGGER_PHOTO_ID_5267866504814555890" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 320px; CURSOR: hand; HEIGHT: 131px; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_cJRcq0RQPpM/SRs4rP-mcvI/AAAAAAAAADo/vsOSEVuZxLM/s320/image006.jpg" border="0" /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Слегка меняем исходники в директории “demo\samples\webapp\WEB-INF\classes\servlets” – делаем возможность запуска отчета используя параметр reportfile: String rp = req.getParameter(“reportfile”); String reportFileName = context.getRealPath("/reports/”+rp+”.jasper");&lt;br /&gt;“demo\samples\webapp” для тестирования – в HTML все линки прописываем название отчета “?reportfile=WebappReport”;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family:times new roman;"&gt;В корневом каталоге “ demo\samples\webapp” запускаем ANT.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5267867172858124402" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; HEIGHT: 99px; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_cJRcq0RQPpM/SRs5SIomWHI/AAAAAAAAAEA/VhZTfdfqY-M/s400/image008.jpg" border="0" /&gt;&lt;br /&gt;Итак, после настройки Tomcat, копируем содежимое “demo\samples\webapp” в Tomcat ”webapps\jasper”, и запускаем его.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;&lt;br /&gt;Открываем браузер вводим туда ссылку ниже (Внимание у вас может отличаться порт!).&lt;br /&gt;&lt;a href="http://localhost:8887/jasper/"&gt;http://localhost:8887/jasper/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5267869033476345522" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; HEIGHT: 266px; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_cJRcq0RQPpM/SRs6-b-jTrI/AAAAAAAAAEQ/1B6XMq7-V-g/s400/image010.jpg" border="0" /&gt;&lt;span style="font-family:times new roman;"&gt;Здесь же и проверяем отчет.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Второй шаг&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;Итак, отчет у нас работает, теперь приступаем к GWT. При нажатии на “Logined users”, открывается пустой таб:&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;img id="BLOGGER_PHOTO_ID_5267869036611281362" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; HEIGHT: 282px; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_cJRcq0RQPpM/SRs6-np-odI/AAAAAAAAAEY/vxRgGTtGav8/s400/image012.jpg" border="0" /&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;Осталось интегрировать Jasper.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:times new roman;"&gt;Создаем простейший ReportManager class со статическим методом:&lt;br /&gt;public class ReportManager {&lt;br /&gt;public static String getExportReportURL(String report, String exptype){&lt;br /&gt;return "http://localhost:8887/jasper/servlets/"+exptype+"?reportfile=" + report;&lt;br /&gt;};&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-family:times new roman;"&gt;}&lt;br /&gt;&lt;p&gt;Далее создаем панель:&lt;/p&gt;&lt;p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-family:times new roman;"&gt;Panel centerPanel = new Panel();&lt;br /&gt;centerPanel.setLayout(new BorderLayout());&lt;br /&gt;centerPanel.setTitle("Sessions");&lt;br /&gt;…&lt;br /&gt;&lt;br /&gt;String rep_url = ReportManager.getExportReportURL("WebappReport","html");&lt;br /&gt;final Frame frame = new Frame(rep_url);&lt;br /&gt;centerPanel.add(frame, new BorderLayoutData(RegionPosition.CENTER));&lt;br /&gt;&lt;br /&gt;Toolbar toolbar = new Toolbar();&lt;br /&gt;toolbar.addFill();&lt;br /&gt;ToolbarButton toolbarButton = new ToolbarButton("PDF", new ButtonListenerAdapter() {&lt;br /&gt;public void onClick(Button button, EventObject e) {&lt;br /&gt;frame.setUrl(ReportManager.getExportReportURL("WebappReport","pdf"));&lt;br /&gt;}&lt;br /&gt;});&lt;br /&gt;…&lt;br /&gt;&lt;br /&gt;Запускаем проект в Host Mode, нажимаем на “Logined users” и .... получаем&lt;/span&gt;&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5267869042147709074" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; HEIGHT: 329px; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_cJRcq0RQPpM/SRs6-8R90JI/AAAAAAAAAEg/W2oLL5JruCY/s400/image014.jpg" border="0" /&gt;&lt;span style="font-family:times new roman;"&gt;При нажатии PDF – мы увидим отчет уже в Pdf формате:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5267869053771719378" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; HEIGHT: 328px; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_cJRcq0RQPpM/SRs6_nlWItI/AAAAAAAAAEo/-0yAObOpCPg/s400/image016.jpg" border="0" /&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;Теперь осталось дождаться клиента и за чашечкой кофе рассказать о будущих перспективах :)&lt;/span&gt;&lt;p&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9181518947198443407-1416425070627376104?l=gwt-rus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gwt-rus.blogspot.com/feeds/1416425070627376104/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9181518947198443407&amp;postID=1416425070627376104' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9181518947198443407/posts/default/1416425070627376104'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9181518947198443407/posts/default/1416425070627376104'/><link rel='alternate' type='text/html' href='http://gwt-rus.blogspot.com/2008/11/gwt-gwt-ext-jasperreports.html' title='GWT (GWT-EXT) + JasperReports быстро и просто.'/><author><name>Alexey Zaprudnev</name><uri>http://www.blogger.com/profile/13879898732909647797</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_cJRcq0RQPpM/SRs28-dhRFI/AAAAAAAAADY/A_EmP4OpBzs/s72-c/image001.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9181518947198443407.post-10736772082151690</id><published>2008-11-06T21:15:00.004+02:00</published><updated>2008-11-12T22:53:42.091+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='outlook'/><category scheme='http://www.blogger.com/atom/ns#' term='gwt'/><category scheme='http://www.blogger.com/atom/ns#' term='button'/><title type='text'>Как сделать GWT StackPanel пοхожим на Outlook</title><content type='html'>&lt;span style=";font-family:times new roman;font-size:100%;"  &gt;На этот раз хочется поделиться новым компонентом на GWT - Outlook Stack Panel.&lt;br /&gt;Почему я решил написать его?&lt;br /&gt;Проблема в том, что стандартный StackPanel от GWT, работает так, что при выборе закладки, она сдвигает другие закладки и показывается ее содержание. При этом получается так, что содержание закладки все время скочет вверх и вниз, что на мой взгляд не очень user friendly.&lt;br /&gt;&lt;br /&gt;Пример stack панели, как бы я ее хотел видеть - Outlook stack panel: содержимое всегда находится в одном месте, кнопки не скочат и имеют один и тот же порядок.&lt;br /&gt;Вот что у меня получилось.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_ON7OSu7G6NA/SRNNhI5xN3I/AAAAAAAAAJY/Hjl3f5xeTeU/s1600-h/OutlookStackPanel.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; cursor: pointer; width: 192px; height: 320px;" src="http://3.bp.blogspot.com/_ON7OSu7G6NA/SRNNhI5xN3I/AAAAAAAAAJY/Hjl3f5xeTeU/s320/OutlookStackPanel.png" alt="" id="BLOGGER_PHOTO_ID_5265637621047048050" border="0" /&gt;&lt;/a&gt;      &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_ON7OSu7G6NA/SRNOGPMLAbI/AAAAAAAAAJg/uNHjxGNHXLs/s1600-h/OutlookStackPanel2.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; cursor: pointer; width: 191px; height: 320px;" src="http://1.bp.blogspot.com/_ON7OSu7G6NA/SRNOGPMLAbI/AAAAAAAAAJg/uNHjxGNHXLs/s320/OutlookStackPanel2.png" alt="" id="BLOGGER_PHOTO_ID_5265638258390008242" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Как видете, при смене закладки сами закладки остаются на том же месте, меняется заголовок и содержание.&lt;br /&gt;Реализуется это используя DeckPanel компонент.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;/**&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;* Creates an empty stack panel.&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;*/&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;public OutlookStackPanel() {&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;content.setAnimationEnabled(true);&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;content.setWidth(DEFAULT_WIDTH);&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;container.setStyleName(DEFAULT_STYLE);&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;header.setSize(DEFAULT_WIDTH, DEFAULT_HEADER_HIGHT);&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;footer.setSize(DEFAULT_WIDTH, "");&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;ScrollPanel scroller = new ScrollPanel();&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;scroller.setAlwaysShowScrollBars(false);&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;scroller.add(content);&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;container.setVerticalAlignment(HasVerticalAlignment.ALIGN_TOP);&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;container.add(header);&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;container.add(scroller);&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;container.setVerticalAlignment(HasVerticalAlignment.ALIGN_BOTTOM);&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;container.add(footer);&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;content.setAnimationEnabled(true);&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;header.setStyleName(DEFAULT_HEADER_STYLE);&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;initWidget(container);&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;sinkEvents(Event.ONCLICK);&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;sinkEvents(Event.ONMOUSEOVER);&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;sinkEvents(Event.ONMOUSEOUT);&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Затем не хитрый код, для отображениа нужного содержания&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;@Override&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;public void onBrowserEvent(Event event) {&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;Element target = event.getTarget();&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;if (DOM.eventGetType(event) == Event.ONCLICK) {&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;for (Widget widget : buttons) {&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;if (widget.getElement() == target) {&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;buttons.get(header.getVisibleWidget()).removeStyleDependentName("selected");&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;widget.addStyleDependentName("selected");&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;int index = buttons.indexOf(widget);&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;if (index &gt;= 0) {&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;header.showWidget(index);&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;content.showWidget(index);&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;}&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;}&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;}&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;} else if (DOM.eventGetType(event) == Event.ONMOUSEOVER) {&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;...&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;...&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;} else if (DOM.eventGetType(event) == Event.ONMOUSEOUT) {&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;...&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;...&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Вы можете скачать исходники &lt;a href="http://www.box.net/shared/yaqamqygnl"&gt;здеся&lt;/a&gt; ;) Удачи!&lt;br /&gt;В скором времени, я надеюсь выложить GWT application starter &lt;a href="http://code.google.com/p/gwtfuse"&gt;here (gwtfuse)&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;Если кто либо сделал это более красиво и элегантно, то прошу поделиться идеями ;)&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9181518947198443407-10736772082151690?l=gwt-rus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gwt-rus.blogspot.com/feeds/10736772082151690/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9181518947198443407&amp;postID=10736772082151690' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9181518947198443407/posts/default/10736772082151690'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9181518947198443407/posts/default/10736772082151690'/><link rel='alternate' type='text/html' href='http://gwt-rus.blogspot.com/2008/11/how-to-make-gwt-outlook-style-stack.html' title='Как сделать GWT StackPanel пοхожим на Outlook'/><author><name>Viktor Zaprudnev</name><uri>http://www.blogger.com/profile/17836965695137615226</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://3.bp.blogspot.com/_ON7OSu7G6NA/SQzf1Cc0MSI/AAAAAAAAAJA/BFPE9ILosjI/S220/l1180507038319.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_ON7OSu7G6NA/SRNNhI5xN3I/AAAAAAAAAJY/Hjl3f5xeTeU/s72-c/OutlookStackPanel.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9181518947198443407.post-531162485608251547</id><published>2008-11-01T20:08:00.001+02:00</published><updated>2008-11-12T22:54:51.249+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gwt'/><category scheme='http://www.blogger.com/atom/ns#' term='button'/><title type='text'>Как сделать красивую кнопку в GWT</title><content type='html'>&lt;span style="font-family: times new roman;"&gt;GWT прекрасный инструмент для разработки веб апликаций. На мой взгляд, единственный недостаток его на сегодняшний день - недостаток красивых компонентов. Конечно, это легко решить с помощью Gwt-ext или Ext-gwt, но, хотите ли вы добавлять на ваш сайт всю библиотеку этих скриптов и становиться зависимым от них? А что если вам нужно всего навсего несколько компонентов?&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: times new roman;"&gt;Недавно, работая в одном GWT проекте нам понадобилось создать кнопки определенного вида и я решил, почему бы не поделиться этим с другими любителями GWT.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="font-family: times new roman;" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_ON7OSu7G6NA/SQzUAAxVYJI/AAAAAAAAAIw/oe7ULmKCcr0/s1600-h/Screenshot-Example+.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 187px;" src="http://4.bp.blogspot.com/_ON7OSu7G6NA/SQzUAAxVYJI/AAAAAAAAAIw/oe7ULmKCcr0/s320/Screenshot-Example+.png" alt="" id="BLOGGER_PHOTO_ID_5263815161161277586" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: times new roman;"&gt;Так может выглядеть кнопка. Используя CSS и GWT Hyperlink, можно создать кнопку любого вида.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: times new roman;"&gt;Я не нашел, как можно поместить рабочий пример на сайт, и поместил линк, по которому можно скачать скомпилированный пример (если вам лень настраивать проект в Eclipse): &lt;/span&gt;&lt;a style="font-family: times new roman;" href="http://www.box.net/shared/r5s6jfm14o"&gt;Скомпилированная версия&lt;/a&gt;&lt;span style="font-family: times new roman;"&gt;, а также вы можете скачать исходники по этой ссылке: &lt;/span&gt;&lt;a style="font-family: times new roman;" href="http://www.box.net/shared/r5s6jfm14o"&gt;Скачать исходники&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: times new roman;"&gt;Если у вас есть лучше идеи, как сделать эти кнопки, пишите, буду рад!&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9181518947198443407-531162485608251547?l=gwt-rus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gwt-rus.blogspot.com/feeds/531162485608251547/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9181518947198443407&amp;postID=531162485608251547' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9181518947198443407/posts/default/531162485608251547'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9181518947198443407/posts/default/531162485608251547'/><link rel='alternate' type='text/html' href='http://gwt-rus.blogspot.com/2008/11/how-to-make-nice-button-with-gwt.html' title='Как сделать красивую кнопку в GWT'/><author><name>Viktor Zaprudnev</name><uri>http://www.blogger.com/profile/17836965695137615226</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://3.bp.blogspot.com/_ON7OSu7G6NA/SQzf1Cc0MSI/AAAAAAAAAJA/BFPE9ILosjI/S220/l1180507038319.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_ON7OSu7G6NA/SQzUAAxVYJI/AAAAAAAAAIw/oe7ULmKCcr0/s72-c/Screenshot-Example+.png' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
