0

我有几个面板组,一个带有“注册”和“登录”链接,另一个带有“注销”链接。当我登录时,只有“登录”链接消失,“注册”保持呈现,而“注销”永远不会呈现。#{user.loggedIn}" 在用户登录时返回 true。在调试模式下刷新屏幕时,我可以看到该方法正在运行。有关如何使其正常工作的任何建议。代码应该是解释性的,如果不是,请告诉我。

<h:panelGroup rendered="#{!user.loggedIn}">
  <li>
    <h:outputLink id="loginLink" value="javascript:void(0)" onclick="dlg.show()" title="login" styleClass="loginpanelclass">Log In</h:outputLink>
  </li>
  <li>
    <h:link value="Register" outcome="/registration/register.xhtml" />
  </li>
</h:panelGroup>

<h:panelGroup rendered="#{user.loggedIn}">
  <li>
    <h:commandLink action="#{user.logout()}">Logout</h:commandLink>
  </li>
</h:panelGroup>
4

1 回答 1

0

如果您要引用的元素不在您引用它们的同一命名容器中,则它们必须位于命名容器中。对我来说,当我点击问题中的第一个链接时,我会使用 primefaces 启动登录对话框。对话框内部是一个表单。当该表单完成时,它通过使用 p:dialog update 属性告诉我上面问题中的面板是否呈现。我必须将面板放在我的问题中的命名容器中,然后才能通过层次结构使用“:”符号成功引用它们。

如果有人遇到问题,请查找有关 JSF 中组件层次结构和命名容器的文章。有了 Daniel 在上面的评论中给出的提示,以及我在查看层次结构和命名容器时发现的东西,我现在觉得这个已经足够好了。仍然有一些不确定性,但我的代码现在可以完成我想要它做的事情。:) 我将丹尼尔在他的链接问题中给出的答案标记为一个。

于 2012-07-11T16:34:25.357 回答