2014-02-07 52 views
0

我有一个像下面非Ajax方法ViewScoped给予同样的结果托管bean

<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> 

一个DataTable我有一个小组名称的细节,如以下

<p:panel> 
     <h:outputText value="#{userTable.userId}"/> 
     <h:outputText value="#{userTable.userName}"/> 
</p:panel> 

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

问题在于,当用户点击任何userId(commandLink)时,他将完美地获得细节。然后他可以使用浏览器后退按钮,并尝试通过单击另一个用户标识来获取详细信息。但在这种情况下,用户得到的结果与上一个相同。并没有在错误日志中。

我发现在视图范围管理bean的某个地方,这个问题与非ajax动作方法存在。但我需要保持它在viewcoped维护表状态与排序和分页。所以无论何时用户按下返回按钮,我都可以在选择前显示相同的屏幕

请帮忙。提前致谢。

+0

我感到困惑的流程:你希望用户停留在同一页面上,只是表现出它不同的元素?如果有一个'f:viewParam name =“userId”',那么当空表显示表时加载用户实体(如果可能,则使用'f:viewAction')。 – mabi

+0

@mabi是的,你是对的实施。但是f:viewParam用于设置get请求的url中的值。在我的情况下,我通过命令链接发布了请求。 –

+0

你想让它保持那种方式吗?因为如果你允许反向导航,把这个状态放在URL中是个好主意。 – mabi

回答

0

键盘上的后退按钮不会真正调用新的HTTP请求。猜猜这是错的。这实际上是使用列表和详细信息页面的问题。我一直在努力与相同的错误自己几个小时。

请参见:Difference between jsf actionListener(param) and propertyListener when using back button on keyboard

+0

它没有为我工作:( –

+0

我有一些其他字段做部分请求(ajax)。浏览器返回后,这些组件停止工作。这一切发生在非ajax操作方法,然后浏览器回。 –

+0

你能解释这个详细代码?很难弄清楚文本出了什么问题。 – GregD

相关问题