Grails SQL date formatting tag lib

Mình đang tập tọe học Groovy và Grails nên chẳng rành lắm. Khi thử các ví dụ của Grails, một trong những câu hỏi là làm sao customizing layout và formatting của data cho phù hợp với yêu cầu của KH là các cty nước ngòai ỏ Việt Nam (trong nội bộ thì dùng format của Mẽo, nhưng giao diện cho KH trên web và thư từ, báo cáo cho các quan chức thì dùng format VN)? Câu trả lời cuối cùng là customizing Grails tags cho phù hợp. Điều may mắn là tạo tag lib cho Grails rất dễ, nên việc này không hề là “niềm đau chôn dấu” nhưng khi tạo JSP hay JSF tag lib.

Ví dụ: sau đây là tag lib để format date, trích từ http://douglasfils.blogspot.com/2007/09/grails-sql-date-formating-lib.html

Been working with Grails more and created a little tag lib I thought I would post up for others. The date that comes out of the domains is a rather ugly SQL date style so I create a tag lib with the following code:

 def formatSqlDate = { attrs ->
    def String startdatetime =  "${attrs['targetDate']}"
    def DateFormat odf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.S");
    def DateFormat df = new SimpleDateFormat( "MMM d, ''yy" );
    out << df.format(odf.parse(startdatetime))
 }

Then I can simple reference it with:

<g:formatsqldate targetdate="${domain.dateObject}">

A person can mode the date format string all they want and also could put in various cases or a flag to select a format style if they wished.

Chi tiết cách tạo và khai báo 1 tag lib trong Grails, mời các bạn đọc trong tài liệu đi kèm với Grails :)

Add comment Tháng Sáu 17, 2008

Dùng Groovy để đọc excel file

Đây là bài gốc từ mailing list của org.codehaus.groovy.userI got introduced to JExcelApi on the Groovy IRC channel this morning (http://www.andykhan.com/jexcelapi/)This is a Java package which lets you read an write Excel spreadsheets. It look pretty slick.

I have just hacked a Groovy script which reads an Excel spreadsheet and writes out the cell contents as a CSV


import java.io.File import jxl.Workbook

writeCsv = { | out, workBook, hide | 				for (sheetNumber in 0...workBook.numberOfSheets) { 					sheet = workBook.getSheet(sheetNumber)

out.println sheet.name

if (!(hide && sheet.settings.hidden)) { 						for (rowNumber in 0...sheet.rows) { 							row = sheet.getRow(rowNumber)

println row.findAll({!(hide && it.hidden)}).contents.join(', ') 						} 					} 				} 			}

writeCsv(System.out, Workbook.getWorkbook(new File("jxlrwtest.xls")),  false)
Some things to note:

sheet.settings.hidden
in Java this would have to be

sheet.getSettings().isHidden()
- Groovy’s bean support reduced the noise for

(sheetNumber in 0...workBook.numberOfSheets)

we use the ‘…’ form of the range to go to workBook.getNumberOfSheets() – 1 – again lots less noise

row.findAll({!(hide && it.hidden)}).contents

the findAll call returns a list of cell objects. We want to call getContents() on each cell object. We could use collect({ it.contents}) but someList.someProperty is equivalent to someList.collect({it.someProperty}) and a lot less noisy

If you download the package from the link above you will see a Java version of this in the demo package.

Add comment Tháng Ba 3, 2008

Phát hành GWT 1.4 – thêm nhiều widgets, khởi động nhanh hơn và các nâng cấp khácD

GWT 1.4 đã chính thức phát hành.

Có rất rất nhiều tính năng mới trong GWT 1.4, sau đây chỉ là một số tóm tắt các nâng cấp quan trọng của GWT 1.4

Bạn quan tâm đến hiệu quả của hệ thống (performance)? Phiên bản này bao gồm nhiều đột phá mớ, làm cho việc biên dịch GWT code nhanh hơn và nhỏ hơn một cách rõ rệt. Đã có nhiều người dùng báo cáo rằng ứng dụng dùng GWT của họ giảm kích thước tới 30% và nhanh hơn 20%-50% chỉ đơn giản bằng cách tái biên dịch ứng dụng (recompile). Riêng thời gian khởi động ứng dụng cũng đã được tối ưu cao độ, nhờ vào kỹ thuật bootstrapping mới và tính sẵng sàng (availability) của các file ảnh đi kèm (image bundles)

Bên cạnh cải tiến về thời gian khởi động ứng dụng. GWT code dùng kỹ thuật cache để ngăn ngừa các ứng dụng gọi các yêu cầu HTTP không cần thiết. Như cách nói của Joel Webber (Tech Lead của GWT Core Libraries) : “Các yêu cầu HTTP nhanh nhất là các yêu cầu mà không thực sự xảy ra”. (Có mà như không :-) )

Sau đâu là các tóm lược một cách tổng quan về các nâng cấp chính của phiên bản này:

Các widgets và thư viện (librarie) mới:

  • RichTextArea, HorizontalSplitPanel và VerticalSplitPanel, SuggestBox, DisclosurePanel, PushButton, ToggleButton, và một nâng cấp về Image widget giúp việc tạp các ứng dụng cao cấp một cách dễ dàng chưa từng có!
  • ImageBundle tự động gói nhiều ảnh trong một yêu cầu HTTP duy nhất.
  • NumberFormat (định dạng số) và DateTimeFormat (định dạng ngày) giúp việc lập trình các ứng dụng cho các ngôn ngữ không phải tiếng Anh trở nên dễ dàng.
  • Cuối cùng thì bạn đã có thể dùng java.lang.Serializable với GWT RPC, và GWT RPC server-side subsystem không còn bị trói chặt với servlets. Bạn có thể dễ dàng kết nối (wire) với bất kỳ nền tảng Java back-end (Java back-end infrastructure). Những thảo chương đam mê Spring bây giờ có thể vui mừng thưởng thức.
  • Một sub-system benchmarking dựa trên JUnit giúp cho việc định lượng và so sánh tốc độ của các đoạn code trở nên dễ dàng như việc viết các unit test.

Thêm nhiều lựa chọn cho việc deployment (tiếng Việt dùng từ gì vậy ta???) và tối ưu (optimizations)

  • Thêm các GWT module vào một trang HTML từ bây giờ trở nên vô cùng dễ dàng: chỉ cần thêm một tag <script>.
  • Bạn có thể dùng GWT module xuyên domain (across domain). Chúý rằng việc sử dụn(include) scripts từ các site khác mà bạn không hoàn tòan tin tưởng là một mối nguy về mặt an toàn (security risk).
  • Các file JavaScript ngoại lai (external JavaScript) được các GWT của bạn tham chiếu tới sẽ được tải lên đồng thời, thế nên các hàm dùngđể kiểm tra tính sẵn sàng của các JavaScript ngọai lai sẽ không còn cần thiết.
  • Các RPC whitelist file được tạo tự động giờ đây được sản sinh trong quá trình biên dịch, giúp bắt được các hồi ứng không mong muốn(accidentally responding) với các đối tượng GWT đã được biên dịch trước đó không thể deserialize (tiếng Việt là gì vậy ta???)
  • Bản phân phối GWT giờ đây đã bao gồm DTD cho GWT module XML format, giúp dễ dàng hơn trong khi cấu hình các module trong một XML editor hiểu DTD.

Nếu bạn quan tâm đến GWT, hẳn các bạn cũng sẽ quan tâm đến gwt-ext cũng như nghía qua GWT-EXT show case.

Add comment Tháng Chín 6, 2007

Posting source code trên WordPress

Sau bao ngày chờ đợi, bực mình, than phiền… cuối cùng chức năng cho phép post source code trên WordPress đã có. Hãy xem hướng dẫn của Matt, tác giả.

Add comment Tháng Chín 4, 2007

CSS Coding

Hầu hết các lập trình viên đều khá…lười khi phải làm công việc “mông-má” trang web của mình, nhất là những ai quen với việc chăm chú làm các chức năng có liên hệ đến database/backend. Nhưng việc này lại là khỏan ăn điểm và làm cho trang web dễ thành công (thu hút hơn). Nếu coding web hợp lý và với chủ định dùng CSS ngay từ đầu thì việc “mông má” cũng không đến nỗi là tai họa. Vậy, với CSS ta có thể làm được gì? Hãy xem trong các bài dưới đây để thấy khả năng của CSS:

  1. 70 ý tưởng của các chuyên gia CSS cho công việc lập trình (hay thiết kế?) CSS: http://www.smashingmagazine.com/2007/05/10/70-expert-ideas-for-better-css-coding/
  2. 53 Kỹ thuật không thể thiếu trong thiết kế CSS: http://www.smashingmagazine.com/2007/01/19/53-css-techniques-you-couldnt-live-without/ 

Add comment Tháng tám 7, 2007

Blog hay về vấn đề support Unicode trong Java và các công nghệ liên hệ đến Java trên web

Khi cần lập trình web dùng công nghệ của Java, một trong những câu hỏi thường thấy trong các forum, kể cả forum của cộng đồng Java Việt Nam đó là làm thế nào để hiển thị tiếng địa phương (tiếng Việt chẳng hạn) trên web dùng java, CSDL là Oracle chẳng hạn. Ngoài các bài có sẵn trong site của sun về Java hay trong các site của Oracle, một số tác giả có nhã ý chia sẻ như trong blog của Kieran.

Có thể xem thêm ở đây để hiểu một cách nhanh nhất về Unicode.

Muốn tự lập trình về encoding UTF8? Xem thêm ở đây. Nói cho vui thôi, chứ thấy là sợ rồi còn đâu :-) .

1 comment Tháng tám 6, 2007

Seamless JSF, Part 1: An application framework tailor-made for JSF

Discover Seam’s unique enhancements to the JSF life cycle

JavaServer Faces (JSF) is the first standardized user interface framework for Java™ Web applications. Seam is a powerful application framework that extends JSF. Discover the strong chemistry that these two frameworks share in this first article of a new three-part series. Dan Allen introduces Seam’s enhancements to the JSF life cycle, including contextual state management, RESTful URLs, Ajax remoting, proper exception handling, and convention over configuration.

Here we go!

Add comment Tháng tám 3, 2007

Groovy và database persistence

Những người chuộng java thường có khuynh hướng không thích các ngôn ngự tựa script (scripting languages) dạng trình thông dịch. Tuy nhiên, trong chính Java cũng đang phát triển mạnh khuynh hướng dùng ngôn ngữ dạng thông dịch hay biên dịch khi cần để phát triển các phần như prototype hay các mainternance scripts. Groovy là một ngôn ngữ có sức mạnh của Java nhưng có sự đơn giản của VB.

Sau đây là một vài bài(hoặc blog) về các ứng dụng của Groovy trong việc giải quyết các bài toán cụ thể:

I. Groovy và database persistence:

  1. Groovy kết hợp với JPA: http://www.curious-creature.org/2007/03/25/persistence-made-easy-with-groovy-and-jpa/
  2. Groovy kết hợp với Hibernate và JPA: http://www.mojavelinux.com/blog/archives/2007/05/putting_entities_to_rest_with_groovy_hibernate_and_jpa/#more
  3. Kết hợp Groovy, Spring vào việc config Java: http://www.jroller.com/buggybean/entry/using_groovy_spring_and_javaconfig1
  4. sdfsd

II.

2 comments Tháng tám 3, 2007

OracleXE và Windows Vista

Cuộc sống đúng là muôn màu muôn vẻ :-) . Học và làm Java chết bỏ, nhưng cũng chẳng được phép bỏ .NET. Một trong những vấn đề mình đang phải giải quyết là làm sao cài OracleXE trên Windows Vista vì một chương trình cài sẵn trên máy laptop cần OracleXE.

Sau đây là một số giải pháp có được từ giải pháp Google:

  1. Từ một chuyên gia của Oracle :Getting Ready for Windows Vista
  2. Từ Oracle user group: http://www.psoug.org/reference/vista.html

Ai có giải pháp tốt cho vấn đề này, vui lòng cho biết. Xin cảm ơn.

Add comment Tháng Bảy 25, 2007

Java Web Frameworks và XSS (Cross-site scripting)

Matt Ribble có một ghi nhận rất đáng chú ý về lỗi XSS của các java web frameworks. Chi tiết có thể xem tại đây: http://raibledesigns.com/rd/entry/java_web_frameworks_and_xss

Một entry đáng chú ý khác về vấn đề này có thể xem trong http://www.sleberknight.com/blog/sleberkn/entry/20060721

Thật thú vị :-( khi mọi người luôn có xu hướng tin tưởng vào khả năng chống XSS của java!

Add comment Tháng Bảy 24, 2007

Previous Posts


 

Tháng Bảy 2009
T2 T3 T4 T5 T6 T7 CN
« Tháng 6    
 12345
6789101112
13141516171819
20212223242526
2728293031  

a

Blogroll

Grails

Groovy

Bài viết mới

Lưu trữ

RSS Jason Rudolph (GRails)

RSS Raible Designs

RSS CodeJacked blog