如何自动隐藏/显示组件

How to hide/show adf component automatically

本文关键字:显示 组件 隐藏 何自动      更新时间:2023-09-26

嗨,我想自动隐藏一个adf组件。我有一个selectOneChoice,包含一些数字(从1到12)。例如,当我选择2,它显示的两个字段自动不点击任何按钮。我使用这个函数来隐藏一个声明的组件,但是当我点击一个按钮…

  function enableField(actionEvent) {  
    var nameInputText = actionEvent.getSource().findComponent("soc1");  
    nameInputText.setProperty("visible", true);  
    actionEvent.cancel();  
  }  

我将组件"soc1"设置为可见= true,而不是通过javascript函数更改它..

所以这里的问题是如何从selectonechoise中读取数字,以及如何在不单击任何按钮的情况下直接设置组件可见。

实际上渲染不会做你想要的。你需要使用可见属性。render会导致组件的实际标记不在页面上呈现,因此部分刷新不会导致它出现。渲染是保留的,通常用于隐藏安全的项。我们将渲染属性设置为false,然后刷新包含的父组件——通常是布局管理器——然后它就工作了。所以要么刷新包含该项的布局管理器,要么使用Visible。我上周在课堂上演示了这个用例,它像描述的那样工作。

基本上,你不需要javascript解决方案或任何编程来实现这一点。

你应该设置属性rendered(这样组件就不会在页面上呈现)和partialTriggers,指向selectOneChoice组件,为你想要显示或隐藏的组件。此外,您必须为selectOneChoice组件设置autoSubmit="true"

<af:selectOneChoice id="soc1" autoSubmit="true" .../>
<af:panelGroupLayout id="plg1" partialTriggers="soc1">
  <af:outputText id="ot1" rendered="#{bindings.lov.inputValue le 1}"  inputValue="text1"/>
</af:panelGroupLayout>

注意:这不是工作代码,只是一个示例

它将按照以下方式工作,在selectonchoice的valueChange事件上提交组件值,并为在partialTriggers中指定了它的组件触发partialRefresh。rendered属性将根据它的EL表达式呈现或删除组件。应该被管理的组件被包装到另一个组件中,以确保PPR在未呈现时到达它。