2011-02-02 63 views
1

我需要为某个项目制作一个搜索页面。 输入字段:提交后出现JSF + richfaces问题

<h:inputText styleClass="field35" value="#{searchBean.country}"></h:inputText> 
<h:inputText maxlength="20" styleClass="field35" value="#{searchBean.destination}"></h:inputText> 
<rich:calendar datePattern="dd/MM/yyyy" value="#{searchBean.startDate}"></rich:calendar> 
<rich:calendar datePattern="dd/MM/yyyy" value="#{searchBean.endDate}"></rich:calendar> 

后,我按:

<h:commandButton id="cb41" action="#{searchBean.processForm}" value="Search" styleClass="button" /> 

我预计结果在同一页上rich:dataTable部分进行打印。

<rich:dataTable value="#{searchBean.results}" var="journey"> 

processForm方法的结果变量填充来自数据库和用户数据被转发到同一页面。

第一次搜索后一切正常,但当我再次搜索时,bean和页面输入字段之间的绑定丢失。换句话说,在国家,目的地,startData和endDate的processForm方法中,无论页面上的相应字段是什么,我都只获得空值。

bean的范围是请求,所有字段都有getter和setter。

有没有人有一个想法可能是什么问题?

谢谢。

编辑: 感谢T-EDD 更改范围会议的工作,但是这是一个有点性能杀手,以保持整个豆会话中的所有的时间(和复杂每次删除我离开通缉页) 。我明白为什么这个bean被销毁了,但是在下一个请求之后,我不应该创建一个新的请求,并且我的页面有适当的值?

+1

我不同意把会话范围中的bean是性能杀手!它是什么 - 它只是坚持你的bean在服务器上的每个用户会话的生命周期,这需要一些资源,但我不认为它的问题。当用户会话过期时bean被丢弃。 – Eduard 2011-02-03 08:29:03

回答

2

看来你需要

<t:saveState value="#{searchBean}" /> 

添加到您的网页。

该控制器在请求之间保存bean的状态(它提供了在视图的组件树内存储模型值的功能)。

这样它的数据将被保存,而不需要改变bean的会话范围(我不推荐)

你也可以使用

<a4j:keepAlive beanName="searchBean"/> 
+0

就是这样。非常感谢。 – Klark 2011-02-03 12:11:18

1

我认为问题在于bean的请求范围。你是否在每次请求后加载数据?如果不是那么它很清楚,值是空的。尝试会话范围或者你就必须从服务中获取数据或elswere ..

编辑:

这里后您的控制器的代码,没有它,我不能有太大帮助。无需将bean放入会话范围即可解决此问题。简而言之:您需要使用gettres和setter将数据存储在请求之间的bean属性中。

+0

感谢t-edd,我更新了我的问题,所以请好起来,并尝试帮助我多一点:) – Klark 2011-02-02 21:53:46