Setup SmartGWT and Eclipse with -noserver params

Environment:

  • Java 1.6
  • Eclipse 3.5
  • GWT Designer 7.1
  • GWT 1.7
  • SmartGWT 1.2
  • Apache/PHP 2.0/5.2.9

The idea is setup an eclipse project, use SmartGWT that it can deploy to another php project (with param -noserver) and run in debug mode . The ideally way is we can just change code in Eclipse without restart server or refresh browser. Example click on button Click me then show popup message "Hello GWT", then change message to "Hello SmartGWT", and just click button again.

Here are my study in a Sunday noon, after try to use Helloworld 1.6 is included in smartgwt1.2.zip

  1. Step 1: New a GWT project with a example module (GWT Design will automatically add gwt_user.jar to project)

  2. Step 2: Add two libraries are smartgwt.jar and smartgwtskin.jar (name of libraries may be wrong :P)

  3. Step 3: Run compile project to folder war

  4. Step 4: Edit file war/module_name.html add these lines to

    <!-- IMPORTANT : You must set the variable isomorphicDir to [MODULE_NAME]/sc/ so that the SmartGWT resource are correctly resolved -->

    <script> var isomorphicDir = "helloworld/sc/"; </script>

  5. Step 5: Copy folder war to php project. We can test on Firefox with url: /war/.html. If it work well, copy url

  6. Step 6: Open run configuration, new or edit (if existed) project run configuration and do: check noserver and patse the url. Then click apply.

  7. Step 7: Run in debug mode

  8. Step 8: May be Hosted server throws error "Invalid module ...xxx". Don't afraid! Just click Hosted Browser and paste url to it.

  9. Step 9: If url can not run and hosted server still throw errors. Try refresh the hosted browser, because IE may be cache file.

  10. Step 10: Change code in Eclipse and test on browser.

That's all. Some errors which I met are
  • Invalid module (always meet)
  • Could not find helloworld.gwt.xml in your classpath (error when I use helloworld 1.6 project include in smartgwt1.2.zip)
  • Could not find $wind.isc (may be cache, or you do not copy right files and folders)

Now code for fun!!!

Hãy đến ăn thịt và uống máu ta

Gì mà ghê thế! Ăn thịt!!? Uống máu!!? Đó là lời mời gọi đến và được nuôi dưỡng bởi thịt và máu Người. Và... tôi có tin không?

Mỗi buổi chiều đi lễ điều là một cảm giác dễ chịu, thư giãn.

Thư giãn vì cúi mặt trước thánh giá mình thú nhận những điều xấu hổ mà nếu không có Thánh giá chỉ mỗi mình biết mà thôi.

Thư giãn vì mình tự hào nhìn Thánh giá vì một chiến công nho nhỏ mình đã vượt qua chính mình.

Lúc chiều ăn cơm mình lại học được một điều mới. Chạy một vòng lựa quán cớm, lại chọn đúng quán dở nhất. Tiền nào của đó, 10.000 có cái giá của 10.000! Ăn vào một miếng, hic hic dở tệ. Nhưng tại sao trước khi mình lại làm dấu Nhân danh Cha Con và Thánh thần. Đã làm dấu để cám ơn vì bữa ăn mình có, thì sao mình lại chê nó dở!!? Hì hì thui đành ăn hết dĩa cơm.

Hôm nay đi lễ lại đúng ngay ngày vui. Có Đức Hồng Y, Cha Khảm, Đức giám mục người Mỹ gì gì đó của một giáo phận ở Hoa Kỳ. Tiếc là cha Khảm hok có giảng mà thay vào đó Cha Hoa Kỳ giảng và Cha Lương Quang Thiện, cùng tháp tùng đoàn Hoa Kỳ, dịch ra. Nói chung bài giảng có chiều sâu. Đi vòng ngoài, đi vào Lời Chúa, đi vào Thánh thư, đi vào lịch sử, lại quành lại về thực tại. Nói chung nghe chớp nhang nhưng cũng thỏa mãn. Mọi người nhìn chung ai cũng háo hức, chụp hình lia lịa.

Hì hì, mỗi lần có Đức Hồng Y JB Mẫn chủ tế mình vừa háo hức lại vừa chán. Đức Cha có chất giọng điều điều chán chán giống giống Thủ Tướng Dũng, hok biết có bà con Kiên Giang hok nữa. Nhưng bữa nay Cha ho nhiều...!!! Cầu bình an cho Cha.

Mỗi lần thấy Cha Khảm mình lại nhớ tới ngày đi lễ nhà thờ Đức Bà đầu tiên. Đó cũng lại là ngày Đức Thánh Cha John Phaolo II về với Chúa. Một bài giảng về Bình An mà bây giờ mình... quên gần hết nhưng mình hình dung được hình ảnh Đức Thánh Cha thăm lại Ba Lan năm 1979 ngày về tới và hôn lên mặt đất và cầu bình an cho người dân Ba Lan, và .... Lại nghe Huy gà nói Cha Khảm bệnh đầy mình. Cầu Bình An cho Cha!

Cuối lễ, đáng ghét, đáng ghét nhất hai đứa trai gái đáng ghét. Hình như anh chàng là dự tòng, giống mình ngày nào. Con gái gì mà cứ nắm tay con trai. Hic hic nhớ bé Thảo chết đi mất. Đầu lễ hăng hái bao nhiêu thì lúc ra về lại bùn bấy nhiu. Ra về có một mình, trời lại mưa lất phất nữa. Đúng là, có những chiều mưa phơn phớt lạnh, gom cả hồn thu tới lòng người. Nam nhi cổ lai chinh chiến hề!

Rước mình thánh Chúa, hay con rước thật nhiều âm nhạc, hình ảnh và cảm xúc. Amen.

Hãy đến với ta - Thánh sử Gioan và dấu chỉ

Bài đọc hôm nay có hai ý:
1. Thánh Gioan không dùng thuật ngữ "dấu lạ", "phép lạ" mà ngài dùng "dấu chỉ". Dấu chỉ là nội dung tinh thần bên trong của thể hiện vật chất. Ví dụ nhẫn cưới thể hiện tình yêu của đôi vợ chồng.
2. Người ta không những sống bằng của ăn mà còn bởi lời của Thiên Chúa. Bí tích thánh thể với 3 thánh sử nhất lãm khác là: thiết lập, tưởng nhớ, công bố thì với Thánh Gioan đó là thức ăn nuôi dưỡng chúng ta.

(Ghi chú sau lễ Chúa nhật 9-8-2009 nhà thờ Đức Bà Sài Gòn)

iRave Gallery Widget

My Album on iRave

Thay HTML Table bằng Ext Grid

Nghịch cảnh:
Có sẳn một trang PHP/HTML sinh ra table danh sách các customer. Làm sao thay HTML table này bằng ExtJS Grid.

Vấn đề:
Truyền thống thì vẽ HTML Table đặt trong view lấy model từ controller cung cấp. Và khi về đến browser, browser chỉ việc vẽ html đó nữa mà thui. Tuy nhiên, Ext Grid/Store thì quá trình xử lý model dữ liệu lại nằm ở browser. Vậy vấn đề là lấy đâu ra dữ liệu?

Cách đã làm:
Ở server/controller: echo một object định dạng Json


<script language="JavaScript" type="text/javascript">
eval('var companiesData = <?php echo "{total: $total, results: " . json_encode($rows) . "}"?>');
</script>



Dòng eval ở trên là để khi về đến browser, sẽ tạo ra được một object companiesData. Và object này sẽ được dùng ở

ds.loadData(companiesData); //o day ds = new Ext.data.Store({ ...});


Vậy là chạy. Tuy nhiên vì đây là table đơn giản không yêu cầu nhiều về tìm kiếm, sort cho nên thay ngay thế này. Nếu có các yêu cầu khác thì nên dùng ajax call lên server/controller để lấy json data.

How-to: Yêu cầu người dùng đăng nhập để được phép đọc nhưng tin tức trả tiền

How-to: Yêu cầu người dùng đăng nhập để được phép đọc nhưng tin tức trả tiền

Nghịch cảnh:

Có những mục tin như sau:

  • Press news: tin miễn phí
  • Members news: tin phải là thành viên (đăng ký miễn phí) mới được đọc
  • Paid news: tin trả tiền, phải là thành viên thuộc nhóm khách hàng thân thiết (trả tiền hàng tháng) để đọc
Mỗi mục tin có một trang để đọc tin chi tiết và một trang hiển thị backnumber. Với trang yêu cầu đăng nhập sẽ hiện login box để user đăng nhập. Với trang yêu cầu là thành viên đóng tiền thì thông báo "Bạn chưa đăng nhập hoặc bạn chưa là gold members".

Thực hiện:

Bước 1: cài đặt các module cần thiết. Ở đây giả sử bạn đã biết cách sử dụng Module Manager để download & install một module mới. Với mỗi module, sau khi cài đặt, xem phần help của mỗi module để biết thêm chi tiết cũng như các cách dùng cụ thể

Frontend users (FEU): quản lý user ở frontend của website.

CustomContent: module tận dụng FEU để cho phép bạn tuỳ biến những nội dung khác nhau với từng user, group khác nhau.

Bước 2: nhúng vào template các đoạn code kiểm tra user đã login chưa, nếu chưa hiện form login cho user

Lấy mục tin Members news để làm ví dụ ở đây. Có hai trang cho mục tin này: 1 trang members_news_detail và 1 trang liệt kê members_news_list

Thêm đoạn code sau vào trang members_news_list để yêu cầu user đăng nhập trước khi đọc tin

 {cms_module module="CustomContent"}  {if $customcontent_loggedin}  {else}  {cms_module module="Frontendusers" form="login" returnto="members_news_list"} {/if} 

{if $customcontent_loggedin}: kiểm tra user đã đăng nhập chưa. Đọc thêm phần help của module CustomContent để biết thêm cách dùng nếu muốn check user còn phải thuộc một nhóm hay một ip cụ thể nào đó.

{cms_module module="Frontendusers" form="login" returnto="members_news_list"}: dùng Login template của modue FEU đẻ hiện form login. Thuộc tính returnto="members_news_list" là trang mà user sẽ được chuyển tới sau khi đăng nhập thành công. Đọc help của FEU để biết thêm về cách dùng các form khác như: logout, forgotpassword. Vào Admin Panel -> User group -> Frontend User->xxxTemplate để tuỳ biến các form theo yêu cầu.

Đoạn code trên có thể được đặt trong phạm vi một trang. Nếu cần dùng chung cho tất cả các trang khác thì đặt vào template của trang.


emplate của trang.


Một cách cài đặt và cấu hình apache2 virtual host trên Debian/Linux

Sửa file apache2.cfg
NameVirtualHost *:80

Tạo file cho site mới, ví dụ pcf

ServerAdmin webmaster@dummy-host2.example.com
DocumentRoot /home/khanhtq/test/cmsms
ServerName dev.cmsms.local
ErrorLog /var/log/apache2/cmsms-error_log
CustomLog /var/log/apache2/cmsms-access_log common


Enable site
#a2ensite pcf

Disable site
#a2dissite pcf

Enable module
#a2enmod userdir

Tiện ích:
Kiểm tra lỗi cú pháp
#apache2 -t