转载于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的提示了。