JSF如何加载托管bean的属性值?
我是JSF初学者。我有一个关于托管bean的问题 步骤0: 有一个托管bean BeanA,作用域是request。和BeanA instance1.propertyA=“0” 步骤1: 使用ajax更改国家,然后在BeanA.countryChanged方法中,更改托管bean BeanA.propertyA=“A”JSF如何加载托管bean的属性值?,jsf,ajax4jsf,Jsf,Ajax4jsf,我是JSF初学者。我有一个关于托管bean的问题 步骤0: 有一个托管bean BeanA,作用域是request。和BeanA instance1.propertyA=“0” 步骤1: 使用ajax更改国家,然后在BeanA.countryChanged方法中,更改托管bean BeanA.propertyA=“A” 步骤2: 提交表单以验证文本输入 <h:inputText id="street" required="#{BeanA.propertyA == "A"}" 这些症状
步骤2:
提交表单以验证文本输入
<h:inputText id="street" required="#{BeanA.propertyA == "A"}"
这些症状表明您的bean属于请求范围。这意味着它会在每个HTTP请求上重新构造。您可能没有意识到,每一个ajax请求也都算作一个单独的HTTP请求。实际上,您没有在同一视图上跨ajax回发重用同一bean实例。每次创建全新实例时,其所有属性都设置为默认值
JSF2.0是以ajax为核心设计的,它通过标准API中新的视图范围解决了这个问题
在JSF1.x中,您需要回到第三方组件库。在您的特定情况下,考虑到您同时使用Tomahawk和Ajax4jsf,您有两个选项:
使用
<t:saveState value="#{BeanA}" />
<a4j:keepAlive beanName="BeanA" />
或者,使用
<t:saveState value="#{BeanA}" />
<a4j:keepAlive beanName="BeanA" />
您使用的是JSF1.x还是2.x?答案取决于此。在以后的问题中,请始终提及使用的确切JSF impl/版本。我想RichFaces 3.x中的1.x显然已经被使用了(
在RichFaces 4.x中不再存在,而4.x只是JSF2.x),所以
就是答案。但是如果它是2.x,@ViewScoped
将是答案。谢谢,@BalusC,谢谢你的快速回复。提交表单时如何同步托管bean的属性状态?非常有用。非常感谢!