Jsf 在ViewScope托管bean中提供相同结果的非ajax方法

Jsf 在ViewScope托管bean中提供相同结果的非ajax方法,jsf,jsf-2,primefaces,view-scope,Jsf,Jsf 2,Primefaces,View Scope,我有一个如下所示的数据表 <p:dataTable value="#{userTable.tempLists}" var="user" sortBy="#{user.userId}" sortOrder="descending" paginator="true" rows="10" paginatorPosition="bottom"> <p:column headerText="User ID" sortBy=

我有一个如下所示的数据表

<p:dataTable value="#{userTable.tempLists}" var="user"
    sortBy="#{user.userId}" sortOrder="descending"      
    paginator="true"
    rows="10" paginatorPosition="bottom">           
    <p:column headerText="User ID" sortBy="#{user.userId}">
        <p:commandLink ajax="false" value="#{user.userId}" action="#{userTable.showDetails(user.userId)}"/>
    </p:column>
    <p:column headerText="User Name" sortBy="#{user.userName}">
        <h:outputText value="#{user.userName}">
        </h:outputText>
    </p:column>
</p:dataTable>
<p:panel>
      <h:outputText value="#{userTable.userId}"/>
      <h:outputText value="#{userTable.userName}"/>
</p:panel>

我有一个面板名称,详情如下

<p:dataTable value="#{userTable.tempLists}" var="user"
    sortBy="#{user.userId}" sortOrder="descending"      
    paginator="true"
    rows="10" paginatorPosition="bottom">           
    <p:column headerText="User ID" sortBy="#{user.userId}">
        <p:commandLink ajax="false" value="#{user.userId}" action="#{userTable.showDetails(user.userId)}"/>
    </p:column>
    <p:column headerText="User Name" sortBy="#{user.userName}">
        <h:outputText value="#{user.userName}">
        </h:outputText>
    </p:column>
</p:dataTable>
<p:panel>
      <h:outputText value="#{userTable.userId}"/>
      <h:outputText value="#{userTable.userName}"/>
</p:panel>

我的UserTable托管bean是视图范围的。功能就像用户单击commandLink时,我的方法将获得用户的详细信息。获取详细信息后,dataTable将隐藏并显示面板。对于用户来说,它几乎像是一个不同的页面

这里的问题是,当用户单击任何用户ID(commandLink)时,他将完全获得详细信息。然后,他可以使用浏览器返回按钮,并尝试通过单击另一个用户ID获取详细信息。但在这种情况下,用户得到的结果和前一个相同。错误日志中没有任何内容

我在某个地方发现,在ViewScopeManagedBean中,这个问题存在于非ajax操作方法中。但我需要将其保持在ViewScope中,以通过排序和分页来维护表状态。所以每当用户按下后退按钮,我可以在选择之前显示相同的屏幕


请帮忙。提前感谢。

键盘上的“后退”按钮实际上不会调用新的HTTP请求。我猜这就是问题所在。实际上最好使用列表和详细信息页面。我自己也为同样的错误挣扎了几个小时


请参阅:

我对您的流程感到困惑:您希望用户停留在同一页面上,只是在页面上显示不同的元素?让
f:viewParam name=“userId”
在为空时显示表,如果不是,则加载用户实体(如果可以,请使用
f:viewAction
。@mabi是的,关于实现,您是对的。但是f:viewParam用于设置get请求的url中的值。而在我的情况下,我有命令链接的post请求。你希望它保持这种状态吗?因为如果您允许反向导航,将该状态放在URL中是个好主意。@Mabi是的,我希望它保持这种状态,因为我还需要保存表的状态和其他一些字段。对于这个URL不是一个好主意。@KushSahu-您的
userTable.showDetails
的实现在哪里?我还有一些其他字段可以执行部分请求(ajax)。浏览器返回后,这些组件停止工作。这一切都发生在非ajax操作方法之后,然后浏览器返回。您能用代码详细解释一下吗?通过文本很难找出哪里出了问题。这与上面给出的代码相同。您可以在我的ViewScope托管bean UserTable的showDetails()方法中找到任何内容。这可能有助于你解释这种行为。下一次单击将显示以前的详细信息,这实际上是“正常的”。你应该考虑制作一个列表和细节页面。