【问题标题】:Seam/RichFaces: Rendering based on result of a JavaScript function or variableSeam/RichFaces:基于 JavaScript 函数或变量的结果进行渲染
【发布时间】:2011-01-10 00:03:09
【问题描述】:

我有一个 RichFaces 组件,我想在 Ajax 调用后渲染它,该调用将 JavaScript 变量设置为 true 或 false。

当变量为 false 时,我不希望面板呈现。有没有办法在组件的 render 属性中输入这个变量(或任何 JS 函数调用)的结果?

【问题讨论】:

    标签: jboss richfaces seam


    【解决方案1】:

    Richfaces 在服务器端呈现组件。所以你必须通过你的 服务器端的参数。有一些方法可以实现这一点。 在页面上创建一个隐藏的输入并将其链接到 bean 中的标志。类似的,

    class YourBean {
    
          private boolean visible = false;
    
          //getter,setter
    
    }
    

    在页面上,

    <h:selectBooleanCheckbox id="hiddeninput" style="visibility:hidden" 
         value="#{yourBean.visible}"/> 
    <rich:component id="compid" rendered="#{yourBean.visible}" />
    
    <a:commandButton onclick="document.getElementById('hiddeninput').checked=true" 
         reRender="compid"/>
    

    或者创建两个将标志设置为真或假的方法。

    class YourBean {
    
          private boolean visible = false;
    
          public void makeInvisible() {
               visible = false;
          }
    
          public void makeVisible() {
               visible = true;
          }
    
    }
    

    在页面上,

    <rich:component id="compid" rendered="#{yourBean.visible}" />
    
    <a:commandButton action="#{yourBean.makeInvisible()}" reRender="compid"/>
    

    【讨论】:

      【解决方案2】:

      选项 1: 您可以在 ajax 请求的 oncomplete 属性中使用 JavaScript/jQuery 显示/隐藏。

      选项 2(更好):您在后端操作的方法中更改布尔属性值,并在呈现的属性中使用它的值。

      【讨论】:

        【解决方案3】:

        RichFaces reRender 可以采用 EL 表达式:

        reRender="#{bean.componentsToUpdate}"
        

        因此,另一种选择是,您可以在运行时(基于输入)决定是否渲染特定组件。

        【讨论】:

          猜你喜欢
          • 2011-07-18
          • 2012-12-06
          • 2011-01-30
          • 2011-01-10
          • 2011-12-12
          • 1970-01-01
          • 2011-11-27
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多