2012-07-09 113 views
0

我有几个面板组,其中一个具有“注册”和“登录”链接,另一个具有“注销”。当我登录时,只有“登录”链接消失,“注册”保持呈现状态,“注销”永远不会呈现。 #{user.loggedIn}“在用户登录时返回true。当在调试模式下刷新屏幕时,我可以看到该方法正在运行。有关如何使其正确工作的任何建议。代码应该是说明性的,请让我知道,如果它不是。JSF呈现属性

<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

一般来说,为了更新未呈现的元素,您必须更新始终呈现的包装器,这可能对您有所帮助http://stackoverflow.com/a/10370268/617373 – Daniel 2012-07-09 06:28:31

+0

我在想这个可能是问题。我会在链接中研究解决方案,看看我能做些什么。此外,专家小组并非表格,这是一个问题吗? – BillR 2012-07-09 12:39:00

+0

@Daniel只是好奇,因为这不是一种形式,我是否将ajax标签包含在面板组或外部......或者在哪里?还是它必须在一个形式? – BillR 2012-07-09 13:05:33

回答

0

要引用的元素必须在一个命名容器,如果它们不在您从引用他们同样的命名容器。对我来说,我启动当我点击第一个链接时,使用primefaces的登录对话框,在对话框里面是一个表单,当这个表单完成时,它告诉我上面问题中的面板是否使用p:dialog update属性来呈现或者不使用。把我的问题的面板放在命名容器中,然后使用':'nota成功引用它们通过层次结构。

如果有人无法在JSF中查找组件层次结构和命名容器的文章。有了丹尼尔在他上面的评论中给出的提示,以及我发现在层次结构和命名容器中看到的东西,我现在认为这一点足够好。还有一些不确定性,但我的代码做了我现在想做的事情。 :)我正在标记丹尼尔在他的相关问题中给出的答案。