2007年3月29日 星期四

Frails - Rails on JSF !!!

Frails官方 | 中文站

這一天終於等到了,爽!!

一直試著使用Rails的精神來撰寫 JSF,但總是寫的很累....

程式碼多到很複雜,還要寫一堆定義檔,一直在找尋一個可以媲美Rails開發速度的方案.

不論是使用好的IDE還是facelets的技術,還有各種不同的組件Richfaces.Myfaces,

終究還是無法跟Rails抗衡.

不過~~~~~Frails的出現即將對Web Framework帶來一大震撼!!

2007年3月24日 星期六

[Richfaces] Configure Skin

Richfaces內訂七種skin:
DEFAULT,emeraldTown,wine,japanCherry,ruby,classic,deepMarine.
可以即時變換Richfaces元件的外觀.

透過這兩個簡單的步驟,即可抽換skin
1.Configure your web.xml
context-param
param-name org.ajax4jsf.SKIN /param-name
param-value #{skinBean.skin} /param-value
/context-param

2.使用backing bean從view端接收使用者所選擇的參數,
注意skin的屬性名稱只包含這七種:
DEFAULT,emeraldTown,wine,japanCherry,ruby,classic,deepMarine

以下是實例:
1.SkinBean.java(包含skin屬性以及set和get)

主要是透過此方法取得skin屬性名稱
private String getSkinParam(){
FacesContext fc = FacesContext.getCurrentInstance();
String param = (String) fc.getExternalContext().getRequestParameterMap().get("s");
if (param!=null && param.trim().length()>0) {
return param;
} else {
return null;
}
}

2.skin.xhtml

h:form
h:outputLink blueSky f:param value="blueSky" name="s" /h:outputLink
h:outputLink classic f:param value="classic" name="s" /h:outputLink
/h:form

3.LIVE_DEMO


以下是我目前碰到的狀況:
1.stack overflow
起因:似乎是form過多
解法:在那個頁面不讓使用者選擇skin,而是從別的頁面選擇skin

2.null exception
起因:在request scope的頁面選擇skin,造成原本的bean從component tree已經消失
解法:把scope設定成session(尚未測試)

3.選完skin之後,頁面回到上一頁
起因:如果是以h:outputLink的方式來傳遞參數,會遇到導向的問題
解法:重新導向頁面

2007年3月23日 星期五

Update Rails1.1.6 into Rails1.2.3 的鳥事

由於架設在國外的主機RAILS更新版本,造成原本運作的系統掛點,真的是OOXX.....

多謝賴董幫我跟阿豆阿詢問,不然我也找不出什麼問題==

hostmonster目前版本:ruby 1.8.5, rails 1.2.3

而我去年開發是用rails 1.1.6,
以下是目前找到需要修改的部份,還沒搞完.......囧

1.首先必須升級 RubyGems,這可由 gem update --system 來達成 gem update rails.

2.將新版的boot.rb以及environment.rb覆蓋掉舊的.

3.修改form元件的格式....一樣醜 ==....
<% form_tag :action => "myAction" do%>
my
<% end %>



Enhance performance on Tomahawk with facelets

Reference Performance

最近注意到JSF的SESSION吃滿重的,雖然說可以設定其他的scope,

但有許多行為必須靠session來達成,只好試著把session的負擔減輕,

不過至少不會比Wicket肥==+
1.Add there tag in tomahawk.taglib.xml.
tag>
tag-name>document /tag-name>
component>
component-type>org.apache.myfaces.Document /component-type>
/component>
/tag>

tag>
tag-name>documentHead /tag-name>
component>
component-type>org.apache.myfaces.DocumentHead /component-type>
/component>
/tag>

tag>
tag-name>documentBody /tag-name>
component>
component-type>org.apache.myfaces.DocumentBody /component-type>
/component>
/tag>

2.Add this in web.xml.
context-param>
param-name>javax.faces.STATE_SAVING_METHOD /param-name>
param-value>server /param-value>
/context-param>

context-param>
param-name>org.apache.myfaces.ADD_RESOURCE_CLASS /param-name>
param-value>org.apache.myfaces.component.html.util.StreamingAddResource /param-value>
/context-param>

context-param>
param-name>org.apache.myfaces.COMPRESS_STATE_IN_SESSION /param-name>
param-value>false /param-value>
/context-param>

context-param>
param-name>org.apache.myfaces.SERIALIZE_STATE_IN_SESSION /param-name>
param-value>false /param-value>
/context-param>

context-param>
param-name>org.apache.myfaces.NUMBER_OF_VIEWS_IN_SESSION /param-name>
param-value>20 /param-value>
/context-param>

3.Change html,head and body on web page.
t:document -> html
t:documentHead -> head
t:documentBody -> body

2007年3月13日 星期二

JSF IDE

以下這三者皆可視覺化設計JSF,根據個人的經驗提出以下見解

1.NETBEAN
優點:
開發速度很快,而且文件滿詳細的.
元件可以即時從design移動位置.
自訂許多很方便的元件,文件也說明的很清楚.

缺點:
我的小老婆有點吃力.
拉出來的CODE滿難懂,或許是希望開發著都從design端著手,像dreamweaverㄧ樣,少看code.
如果案子有問題還是要修改,必須改code,頭就非常大了.
需要花時間了解其自訂的元件如何使用.
支援AJAX的元件還不多.


2.Java Studio Creator
優點:
開發速度很快

缺點:
我的小老婆跑不動,所以直接出局XD


3.Exadel Studio Pro
優點:
支援的元件很多Ajax4jsf,Myfaces,ADFaces,facelets.
其公司就是Richfaces的開發者,研發出支援ajax的元件.

缺點:
我的小老婆有時候會當,將eclipse所用的記憶體調高到512M以上,即可解決.
元件無法從design移動,必須修改code來移動.
怎會沒有納入ICEfaces的元件,怕被搶生意?
不是所有元件都可以視覺化預覽..囧

結語:
個人推薦的是Exadel,最近已經整合到JBoss中,正名成Red Hat Developer Studio,並且不再收錢了!!
看來這次大老們都硬起來了,希望能爲JSF注入新的活力.
將Seam整合進去之後,RHDS能把Seam的code generator發揮到什麼境界?令筆者相當期待.
不過還在研發中,有興趣的人可以先玩Exadel Studio Pro

2007年3月5日 星期一

LOGOUT IN JSF

一般我們在登出時會只接把SESSION清除
FacesContext fc = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) fc.getExternalContext().getSession(false);
session.invalidate();

但是在JSF其session會紀錄額外的資訊,
如果移除掉會造成JSF的component tree無法render,
對此有兩種解法:

1.移除其相關的attribute就好
session.removeAttribute

2.使用filter來管理權限問題