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

本文探讨了JSF中使用request范围的backbean时遇到的问题,特别是关于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﹐然後讓他把此組件也包含進去。
代码转载自:https://pan.quark.cn/s/7f503284aed9 Hibernate的核心组件总数达到五个,具体包括:SessionSessionFactory、Transaction、Query以及Configuration。 这五个核心组件在各类开发项目中都具有普遍的应用性。 借助这些组件,不仅可以高效地进行持久化对象的读取与存储,还能够实现事务管理功能。 接下来将通过图形化的方式,逐一阐述这五个核心组件的具体细节。 依据所提供的文件内容,可以总结出以下几个关键知识点:### 1. SSH框架详细架构图尽管标题提及“SSH框架详细架构图”,但在描述部分并未直接呈现关于SSH的详细内容,而是转向介绍了Hibernate的核心接口。 然而,在此我们可以简要概述SSH框架(涵盖Spring、Struts、Hibernate)的核心理念及其在Java开发中的具体作用。 #### Spring框架- **定义**:Spring框架是一个开源架构,其设计目标在于简化企业级应用的开发流程。 - **特点**: - **分层结构**:该框架允许开发者根据实际需求选择性地采纳部分组件,而非强制使用全部功能。 - **可复用性**:Spring框架支持创建可在不同开发环境中重复利用的业务逻辑和数据访问组件。 - **核心构成**: - **核心容器**:该部分包含了Spring框架的基础功能,其核心在于`BeanFactory`,该组件通过工厂模式运作,并借助控制反转(IoC)理念,将配置和依赖管理与具体的应用代码进行有效分离。 - **Spring上下文**:提供一个配置文件,其中整合了诸如JNDI、EJB、邮件服务、国际化支持等企业级服务。 - **Spring AO...
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值