【发布时间】:2014-03-04 15:13:53
【问题描述】:
我有一个如下的数据表
<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 时,我的方法将获取用户的详细信息。获取详细信息后,数据表将隐藏并显示面板。对于用户来说,它几乎就像一个不同的页面。
问题就在这里,当用户单击任何 userId(commandLink) 时,他将完美地获取详细信息。然后他可以使用浏览器后退按钮并尝试通过单击另一个 userId 来获取详细信息。但在这种情况下,用户得到的结果与前一个相同。错误日志中没有任何内容。
我在某个地方发现,在视图范围托管 bean 中,非 ajax 操作方法存在此问题。但我需要将其保持在视图范围内,以通过排序和分页来维护表格状态。因此,每当用户按下后退按钮时,我都可以在选择之前显示相同的屏幕。
请帮忙。提前致谢。
【问题讨论】:
-
我对您的流程感到困惑:您希望用户停留在同一页面上,只是在其上显示不同的元素?有一个
f:viewParam name="userId",当它为空时显示表格,如果没有则加载用户实体(如果可以的话,使用f:viewAction)。 -
@mabi 是的,您对实施是正确的。但是 f:viewParam 用于在获取请求的 url 中设置值。而在我的情况下,我通过命令链接发布请求。
-
您希望它保持这种状态吗?因为如果您允许后退导航,则将该状态放在 URL 中是个好主意。
-
@Mabi 是的,我希望它保持这种状态,因为我还需要保存表的状态和其他一些字段。并且对于该 URL 将不是一个好主意。
-
@KushSahu - 你在哪里实现
userTable.showDetails?
标签: jsf jsf-2 primefaces view-scope