Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.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
Jsf 回到一页,我失去了状态_Jsf_Jsf 2.2 - Fatal编程技术网

Jsf 回到一页,我失去了状态

Jsf 回到一页,我失去了状态,jsf,jsf-2.2,Jsf,Jsf 2.2,我有一个页面,搜索结果按页面排列。当我向前导航到详细视图并向后导航到结果视图时,结果视图将转到第1页。我怎样才能解决这个问题?我正在使用两个ViewScope bean。我尝试了SessionScope,但它也会这样做。最好的方法是什么 结果页 <f:metadata> <f:viewParam name="lang" value="#{search.language}" /> <f:viewAction action="#{resu

我有一个页面,搜索结果按页面排列。当我向前导航到详细视图并向后导航到结果视图时,结果视图将转到第1页。我怎样才能解决这个问题?我正在使用两个ViewScope bean。我尝试了SessionScope,但它也会这样做。最好的方法是什么

结果页

<f:metadata>
        <f:viewParam name="lang" value="#{search.language}" />
        <f:viewAction action="#{result.init()}" />
</f:metadata>
<h:form>
            <ui:repeat value="#{result.recipesView}" var="rec">
                <h:link value="#{rec.title}" outcome="recipeshow">
                    <f:param name="id" value="#{rec.id}" />
                </h:link>
                <br/>
                <h:outputText value="#{rec.id}"/><br/>
                <h:outputText value="#{rec.author}"/><br/>
                <h:outputText value="#{rec.createDate}"/><br/>
                <br/>
            </ui:repeat>
            <br/>
            <ui:repeat value="#{result.pagesArray}" var="page">
                <h:commandLink value="#{page.pageNumber}" disabled="#{page.pageDisabled}">
                    <f:ajax listener="#{result.doPages()}" render="@form"/>
                    <f:param name="currentPage" value="#{page.pageNumber}"/>
                </h:commandLink>                  &nbsp;
            </ui:repeat>
</h:form>








如果您对视图范围内的数据进行操作,例如通过
管理当前页面,只要您通过回发与当前视图交互,它就可用。当您显示详细信息视图时,您不再处理结果视图,因此您的视图信息基本上消失了。因此,当您按下浏览器的“上一步”按钮时,您将返回到第一页(如果页面未缓存)或之前保留的视图(如果页面已缓存),但您将得到一个
viewexpiredeexception

要克服这个困难,您需要做的是将信息保存在“后退”按钮指向的URL中。换句话说,放弃使用post链接(
)来分页结果,转而使用get链接(
)。后者将用于发送包含相关信息(当前页面、分页大小、分页顺序等)的新get请求以显示结果。这可以通过使用
标记来完成。在这种情况下,当按下“后退”按钮时,将显示带有请求中定义的参数的结果。结果的幂等性是您的情况的关键

因此,您将有一堆
标记来将分页数据保存在结果视图中。您还需要将命令链接更改为普通的
s,其中嵌套的
s也表示分页数据