我有几个小组,一个是“注册”和“登录”链接,另一个是“注销”。当我登录时,只有“登录”链接消失,“注册”保持呈现状态,“注销”永远不会被呈现。当用户登录时,#{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>
答案 0 :(得分:0)
如果要引用的元素不在您引用它们的同一命名容器中,则它们必须位于命名容器中。对我来说,当我点击问题中的第一个链接时,我会使用primefaces启动一个登录对话框。对话框内是一个表单。当该表单完成时,它通过使用p:dialog update属性告诉我上面的问题中的面板是否呈现。我必须将我的问题中的面板放在命名容器中,然后能够通过层次结构中的':'表示法成功引用它们。
如果有人在查找有关组件层次结构的文章和在JSF中命名容器时遇到问题。有了丹尼尔在上面的评论中给出的提示以及我发现的查看层次结构和命名容器的内容,我认为现在已经足够好了。还有一些不确定因素,但我的代码完成了我现在想做的事情。 :)我正在标记Daniel在他的链接问题中给出的答案。