您好我想自动隐藏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读取数字以及如何直接设置组件而不点击任何按钮。
答案 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在未呈现时到达它。