JSF中BACKBEAN設為REQUEST時值變事件需要注意的細節

本文探讨了在JSF框架中使用request作用域的BackBean时遇到的值变事件问题。当页面未发生跳转再次触发其他事件时,先前的值变事件可能会被意外触发。文章提供了几种解决方法,包括在构造函数中获取初始值、利用session存储值或采用MyFaces的<t:savestate>标签。

1﹑值變事件﹕

      當我們把backbean的scop設為request做值變事件時﹐會遇到很多古怪的問題﹐比如﹕你對一個下拉框添加了值變事件﹐當你第一次觸發此事件時﹐一切好像很正常﹔但是如果返回來的頁面是本頁(就是頁面沒做跳轉)﹐然後你再去觸發其他事件時﹐你會發現原來的值變事件也被觸發了﹐然後怎麼找也找不到BUG﹐這時你應該仔細想想﹐到底是什麼觸發了這個值變事件呢。其實這是正常的﹐為什麼呢﹐讓我來解答你吧﹕
首先﹐對與下拉框觸發值變事件是通過﹕添加值變事件監聽器和onchange事件組合形成的﹐對吧﹔
當你第一次觸發onchange時﹐一切都按預計的步驟走。然而頁面回傳過來後(依舊是本頁)﹐你再去做其他的提交動作時﹐這個可惡的值變事件又被觸發了﹐其實這時符合JSF的。因為當你第一次提交回來後﹐頁面上下拉框的值已經變成你剛纔所選擇的值了﹐而變事件的監聽者是在服務端﹐所以﹐一旦你對本頁面提交﹐服務端的監聽者就發現你下拉框的值和原先初始時的值不一樣(因為scop是request)所以它認為客戶端觸發了onchange事件﹐於是呼叫值變事件了。呵呵原來如此﹗﹗﹗﹗
解決辦法就是﹕
1﹑在backbean初始時(就是構造函數中)通過像普通的JSP--servlet拿客戶端的值一樣﹐把下拉框的值先拿到。
2﹑可以把下拉框的值放到session中﹐然後在每次在構造函數中把他取出來。
3﹑用myfaces的<t:savestate>標籤﹐把下拉框的值狀態保存在客戶端。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值