Spring @相反,requestscope不工作看起来像sessionscope在初始请求兑现时工作
我正在使用SpringJSF集成做项目 我有@RequestScope bean,它具有某些属性,在以表单(搜索应用程序)形式显示之后,同一bean的列表属性将从db值中填充,并使用datatable在同一页面上查看(ajax应用于submit/search按钮)。 第一次搜索时,我得到的结果很好,但问题是,当我刷新或在另一个浏览器页面中打开页面时,datatable仍然包含初始请求的数据,也可以从其他页面导航到同一页面,返回到同一页面时,仍然显示初始请求页面/数据,就好像requestscope不工作,而不是会话范围。 我使用spring管理bean及其创建,使用jsf管理前端页面。这可能是faces和spring Anotion混合的问题吗?如果是,这里的解决方案是什么?因为我也通过自动连接其他bean来使用DAO方法。 e、 gSpring @相反,requestscope不工作看起来像sessionscope在初始请求兑现时工作,spring,jsf-2,Spring,Jsf 2,我正在使用SpringJSF集成做项目 我有@RequestScope bean,它具有某些属性,在以表单(搜索应用程序)形式显示之后,同一bean的列表属性将从db值中填充,并使用datatable在同一页面上查看(ajax应用于submit/search按钮)。 第一次搜索时,我得到的结果很好,但问题是,当我刷新或在另一个浏览器页面中打开页面时,datatable仍然包含初始请求的数据,也可以从其他页面导航到同一页面,返回到同一页面时,仍然显示初始请求页面/数据,就好像requestscop
@ManagedBean(name=“inputService”)
@请求范围
公共类输入服务{
@自动连线
高级搜索引擎;
私有字符串名称;
私人集团;
出生日期的私有字符串;
列出搜索结果;
上述属性的getter/setter
公共字符串输出服务()
{
searchResults=Dao.getAdvacnceServiceSearch(姓名、血型、出生日期);
返回“成功”;
}
}
xhtml是:
<div >
<h:dataTable id="tbl" value="#{inputService.searchResults}" var="o" styleClass="display">
<h:column>
#{o.name}
</h:column>
<h:column>
#{o.dateofbirth}
</h:column>
<h:column>
#{o.bloodgroup}
</h:column>
</h:dataTable>
</div>
<h:form>
<table>
<tr><td>Full Name</td>
<td>
<h:inputText value="#{inputService.name}" styleClass="text-box" />
</td></tr>
<tr><td>Date of Birth</td>
<td>
<h:inputText value="#{inputService.dateofbirth}" />
</td></tr>
<tr><td>Blood group</td>
<td>
<h:inputText value="#{inputService.bloodgroup}" />
</td></tr>
<tr><td colspan="2" align="right">
<h:commandButton id="btnServiceSearch" value="Search" action="#{inputService.outputService}" styleClass="submitButton" >
<f:ajax execute="@form" render="tbl"></f:ajax>
</h:commandButton> </td> </tr>
</h:form>
#{o.name}
#{o.dateofbirth}
#{o.bloodgroup}
全名
出生日期
血型
所有bean都是在应用程序上下文中定义的:当我查看您的代码时,发现了一行
@Autowired
AdvancSearchDaoImpl Dao;
这意味着您正在使用JSF+Spring构建应用程序。现在,您需要了解,当您使用两个框架时,我们必须处理两个框架的作用域(我确信Spring+JSF)。现在,在您的情况下,JSF请求作用域不起作用,因为您的bean也被Spring捕获。由于Spring默认为单例作用域,所以它仍然存在于容器中。现在,您还需要在spring上下文中设置范围。您可以通过在bean上添加注释来实现这一点@RequestScoped
或者在spring上下文中创建条目并在那里设置范围。我不使用spring,但症状表明您使用的bean实例实际上是一个spring管理的实例,而不是JSF管理的实例(换句话说,JSF的
@ManagedBean
@RequestScoped
)。据我所知,SpringBeans默认为应用程序范围。是的,我认为Spring实例化了当时使用的singleton whcih。我将JSF的名称和命名更改为Spring托管beans(即将JSF的ManagedBean和@RequestScope更改为Controller和scope(“请求”))但问题是在datatable中看不到任何结果,而datatable以前在某些搜索条件下是可查看的。
@RequestScoped