我正在使用 JDev 12c。
我正在尝试实现一些复选框以用作单选按钮,如下所示:
但我不能让它工作。
我有一个表格 - t2 - 包含三行,其中每一行都有一个复选框。当用户选择复选框时,它应该被选中,如果另一个复选框已经被选中,它应该被取消选中。
应该只能检查一行,并且在提交时必须检查一行。
我的复选框上有以下监听器:
<af:clientListener type="click" method="sayHello"/>
我的 JS 函数如下所示:
function sayHello(event) {
event.cancel();
var source = event.getSource();
var chk1 = AdfPage.PAGE.findComponentByAbsoluteId('t2:0:sbc1');
var chk2 = AdfPage.PAGE.findComponentByAbsoluteId('t2:1:sbc1');
var chk3 = AdfPage.PAGE.findComponentByAbsoluteId('t2:2:sbc1');
if (source == chk1) {
chk1.setValue(true);
chk2.setValue(false);
chk3.setValue(false);
}
else if (source == chk2) {
chk1.setValue(false);
chk2.setValue(true);
chk3.setValue(false);
}
else if (source == chk3) {
chk3.setValue(true);
chk2.setValue(false);
chk1.setValue(false);
}
}
我知道当任何一个复选框被单击时调用该函数,但所有框都保持未选中状态。我可以看到复选标记短暂闪烁,但没有停留。
如果我调用一个空的 javascript 函数,用户可以单击所有三个复选框,并且复选标记保留在框中,但它们不是互斥的,它可以按我的预期工作。
但是当我这样写函数时:
function sayHello(event) {
event.cancel();
var source = event.getSource();
var chk1 = AdfPage.PAGE.findComponentByAbsoluteId('t2:0:sbc1');
}
复选标记立即消失。
我试图删除 'event.cancel(); 但这没有任何区别。
我什至可以用相同形式的输入字段替换我找到的组件,并在其中写入文本。文本出现在输入字段中,但复选标记立即从复选框中消失。
我研究过:
http://technology.amis.nl/2013/05/07/adf-client-side-architecture-select-all/
我在这里做错了什么?
谢谢
金
编辑:
我创建了以下非常简单的页面:
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE html>
<f:view xmlns:f="http://java.sun.com/jsf/core" xmlns:af="http://xmlns.oracle.com/adf/faces/rich">
<af:document title="untitled2.jsf" id="d1">
<af:messages id="m1"/>
<af:resource type="javascript">
function sayHello(event) {
event.cancel();
var source = event.getSource();
var chk1 = AdfPage.PAGE.findComponentByAbsoluteId('sbc1');
var chk2 = AdfPage.PAGE.findComponentByAbsoluteId('sbc2');
var chk3 = AdfPage.PAGE.findComponentByAbsoluteId('sbc3');
if (source == chk1) {
chk1.setValue(true);
chk2.setValue(false);
chk3.setValue(false);
}
else if (source == chk2) {
chk2.setValue(true);
chk1.setValue(false);
chk3.setValue(false);
}
else if (source == chk3) {
chk3.setValue(true);
chk2.setValue(false);
chk1.setValue(false);
}
}
</af:resource>
<af:form id="f1">
<af:panelGridLayout id="pgl1">
<af:gridRow height="100%" id="gr1">
<af:gridCell width="100%" halign="stretch" valign="stretch" id="gc1">
<!-- Content -->
<af:selectBooleanCheckbox label="Label1" id="sbc1" clientComponent="true">
<af:clientListener type="click" method="sayHello"/>
</af:selectBooleanCheckbox>
<af:selectBooleanCheckbox label="Label1" id="sbc2" clientComponent="true">
<af:clientListener type="click" method="sayHello"/>
</af:selectBooleanCheckbox>
<af:selectBooleanCheckbox label="Label1" id="sbc3" clientComponent="true">
<af:clientListener type="click" method="sayHello"/>
</af:selectBooleanCheckbox>
</af:gridCell>
</af:gridRow>
</af:panelGridLayout>
</af:form>
</af:document>
我看到完全相同的奇怪行为.....我似乎无法选中该复选框。复选标记只是消失了。
有输入吗?我被困在这里。
/ 金