【问题标题】:Non-ajax method giving same result in ViewScoped managed bean在 ViewScoped 托管 bean 中给出相同结果的非 ajax 方法
【发布时间】: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


【解决方案1】:

键盘上的后退按钮并没有真正调用新的 HTTP 请求。猜测这是出了什么问题。使用列表和详细信息页面实际上更好。几个小时以来,我自己一直在为同样的错误而苦苦挣扎。

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

【讨论】:

  • 我还有一些其他的字段可以做部分请求(ajax)。浏览器返回后,这些组件停止工作。这一切都发生在非 ajax 操作方法之后,然后浏览器返回。
  • 你能用代码详细解释一下吗?很难通过文字找出问题所在。
  • 与上面给出的代码相同。您可以在我的 viewscoped 托管 bean UserTable 的 showDetails() 方法中包含任何内容。
  • stackoverflow.com/questions/10305718/… 这可能会帮助您解释行为。下一次点击会显示之前的细节其实是“正常的”。你真的应该考虑制作一个列表和详细信息页面。
猜你喜欢
  • 2014-02-24
  • 2016-12-26
  • 2011-03-03
  • 2011-11-10
  • 2012-08-27
  • 2013-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多