轉載于http://hi.baidu.com/baileyfu/blog/item/373ad8436ea594149313c63b.html
JSF導航帶參數
2008年04月23日 星期三 下午 05:54
在jsf的配置文件faces-config.xml中,導航通常是導到不能帶參數的頁面,這在某些情況會造成一些浪費,就是說你不得不寫一些沒有太多用處的頁面,舉例來說:
<navigation-rule>
<from-view-id>/login.jsp</from-view-id>
<navigation-case>
<from-outcome>succeed</from-outcome>
<to-view-id>/loginsuccess.jsp</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>fail</from-outcome>
<to-view-id>/loginfail.jsp</to-view-id>
</navigation-case>
</navigation-rule>
通常在loginfail.jsp中可能并沒有什么實際的內容,只是告訴用戶登錄失敗請重新登錄,當然,有人會說,可以直接把登錄失敗 導航至loginsuccess.jsp上,然后通過<h:message>來顯示失敗信息,這樣有時候會造成其他的一些問題。我們可以采取 另外一種方法,讓登錄失敗后返回loginsuccess.jsp時帶上參數來標明失敗的原因:
首先,在loginBean的驗證登錄的方法里,定義:帳戶錯誤返回1,驗證碼錯誤返回2,全部正確返回0,然后通過FacesContext的重定向方法來跳轉并帶參數,如下:
LoginBean:
public String login() {
String result = "";
int ret = authenticate(username,pwd,verifyingcode);
if(ret == 0) result = "succeed";
else
{
switch (ret) {
case 1:
result = "login.jsf?result=wrongpwd";break;
case 2:
result = "login.jsf?result=wrongcode";break;
}
try {
FacesContext.getCurrentInstance().getExternalContext().redirect(result);//重定向
} catch (IOException e) {
e.printStackTrace();
}
}
return result;
}
此時,還要注意faces-config.xml中配置的變化,去掉原來fail的導航,只保留succeed的導航即可。
這樣,在loginsuccess.jsp中就可以獲取result參數來做一些諸如alert的提示了。