【问题标题】:How to show a component by the controller?如何通过控制器显示组件?
【发布时间】:2011-09-24 20:45:06
【问题描述】:

我需要注册一个用户,然后我想调用<rich:popupPanel>,例如用图标显示错误或成功消息。

<rich:popupPanel id="popup" modal="false" autosized="true" resizeable="false">
    <f:facet name="header">
        <h:outputText value="Simple popup panel" />
    </f:facet>
    <f:facet name="controls">
        <h:outputLink value="#"
            onclick="#{rich:component('popup')}.hide(); return false;">
                X
            </h:outputLink>
    </f:facet>
    <p>Any content might be inside this panel.</p>
</rich:popupPanel>

在我的控制器中验证注册过程后,我该怎么做? 我可以调用&lt;h:message&gt;,但我认为带有一些图标和状态消息的popupPanel 更适合用户。

【问题讨论】:

    标签: java model-view-controller jsf jsf-2 richfaces


    【解决方案1】:

    通常,您只需在 bean 的操作方法中设置一些(布尔)切换或特定对象属性,然后在相关组件的 rendered 属性中使用。这是一个带有简单布尔值的示例:

    private boolean success;
    
    public void submit() {
        // ...
    
        success = true;
    }
    
    public boolean isSuccess() {
        return success;
    }
    

    <rich:popupPanel rendered="#{bean.success}">
         ...
    </rich:popupPanel>
    

    您还可以设置一些对象属性,然后检查它是否不为空或为空。例如。当User在注册后成功保存并从数据库中获得ID时:

    <rich:popupPanel rendered="#{not empty bean.user.id}">
         ...
    </rich:popupPanel>
    

    注意:在您的&lt;rich:popupPanel&gt; 的特定情况下,您也可以使用show 属性而不是rendered 属性。

    <rich:popupPanel show="#{bean.success}">
         ...
    </rich:popupPanel>
    

    唯一的区别是当showfalse 时,组件仍然被渲染,但随后使用 CSS display:none; 使其在 HTML DOM 树中视觉上隐藏,因此您可以重新显示它JavaScript。

    另见:

    【讨论】:

    • 感谢您的帮助。但是现在如果我把这个成功放在 SessionScope 中,它总是会出现这个框..知道我在用户注册后如何向用户显示消息,然后在成功属性设置为 false 之后?
    • 不要将请求/查看范围内的数据放在会话范围内。将请求/视图范围的数据放入请求/视图范围。另见balusc.blogspot.com/2011/09/…
    • 谢谢你的朋友,你给了一个见解=],你是最棒的
    猜你喜欢
    • 2012-09-25
    • 2014-09-23
    • 2020-04-16
    • 1970-01-01
    • 1970-01-01
    • 2011-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多