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

1﹑值變事件﹕

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值