如何自动隐藏/显示adf组件

时间:2015-09-26 13:10:02

标签: javascript jsf-2 oracle-adf jdeveloper

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

  function enableField(actionEvent) {  

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

我设置组件“soc1”visible = true,而不是通过javascript函数我改变它..

这里的问题是如何从selectonechoise读取数字以及如何直接设置组件而不点击任何按钮。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

您应该设置属性rendered(这种方式组件不会在页面上呈现)和partialTriggers指向要显示或隐藏的组件的selectOneChoice组件。您还必须为autoSubmit="true"组件设置selectOneChoice

<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>

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

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