JSF中backbean設為request組件添加render屬性時的詭异事情

當我們把backbean設為request時總是會遇到許許多多的問題﹐比如render屬性﹐不知道你們有沒有遇到過關於render詭异的事情。
有時後我們把JSF的組件添加render屬性後﹐再通過backbean裡的一個flag變量來控制此組件在頁面上的呈現﹐然而呈現是沒問題﹐一旦遇到需要提交時就會有問題了----值居然提交不上去(當然如果backbean是session範圍時是沒問題的)﹐ 這種情況還只發生在﹕初始時此組件是不顯示﹐然後通過其他提交來更改backbean中的flag﹐使此組件顯示﹐接下來對此組件中的表單元素做提交﹐卻發現怎麼也提交不上去
其實問題的根源在於還沒弄清 JSF的生命週期因為在JSF中你每一次提交﹐他的backbean都是重新new出來的(backbean是request時)即重建組件樹﹐所以裡面的值就是你初始時的值﹐當然flag也是false﹐也就是說你的組件是不顯示的﹐這樣JSF他就不去處理這個組件中的元素了﹐到此組件樹已重建好﹐接下來是驗證及轉換﹐不說了﹐ 再接下來就是塞值到JSF樹了﹐可是由於你的JSF樹中對於那塊組件並沒有加進來﹐所以你的值是塞不進去的
解決辦法就是﹕
1﹑在backbean初始時(就是構造函數中)通過 像普通的JSP--servlet拿客戶端的值一樣﹐把flag的值先拿到(可以通過加隱藏域等方法)。
2﹑可以把flag放到 session中﹐然後在構造函數中把他取出來。
3﹑用myfaces的 <t:savestate>標籤﹐把flag的值狀態保存在客戶端。
其實原理都一樣就是搶先在JSF形成組件樹前﹐更改flag的值為true﹐然後讓他把此組件也包含進去。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值