Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring @相反,requestscope不工作看起来像sessionscope在初始请求兑现时工作_Spring_Jsf 2 - Fatal编程技术网

Spring @相反,requestscope不工作看起来像sessionscope在初始请求兑现时工作

Spring @相反,requestscope不工作看起来像sessionscope在初始请求兑现时工作,spring,jsf-2,Spring,Jsf 2,我正在使用SpringJSF集成做项目 我有@RequestScope bean,它具有某些属性,在以表单(搜索应用程序)形式显示之后,同一bean的列表属性将从db值中填充,并使用datatable在同一页面上查看(ajax应用于submit/search按钮)。 第一次搜索时,我得到的结果很好,但问题是,当我刷新或在另一个浏览器页面中打开页面时,datatable仍然包含初始请求的数据,也可以从其他页面导航到同一页面,返回到同一页面时,仍然显示初始请求页面/数据,就好像requestscop

我正在使用SpringJSF集成做项目 我有@RequestScope bean,它具有某些属性,在以表单(搜索应用程序)形式显示之后,同一bean的列表属性将从db值中填充,并使用datatable在同一页面上查看(ajax应用于submit/search按钮)。 第一次搜索时,我得到的结果很好,但问题是,当我刷新或在另一个浏览器页面中打开页面时,datatable仍然包含初始请求的数据,也可以从其他页面导航到同一页面,返回到同一页面时,仍然显示初始请求页面/数据,就好像requestscope不工作,而不是会话范围。 我使用spring管理bean及其创建,使用jsf管理前端页面。这可能是faces和spring Anotion混合的问题吗?如果是,这里的解决方案是什么?因为我也通过自动连接其他bean来使用DAO方法。 e、 g

@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