Javascript Oracle ADF复选框处于丢失状态
我使用的是jdev12c 我正在尝试实现一些复选框作为单选按钮,如下所示:Javascript Oracle ADF复选框处于丢失状态,javascript,oracle,oracle-adf,Javascript,Oracle,Oracle Adf,我使用的是jdev12c 我正在尝试实现一些复选框作为单选按钮,如下所示: function sayHello(event) { event.cancel(); var source = event.getSource(); var chk1 = AdfPage.PAGE.findComponentByAbsoluteId('t2:0:sbc1'); var chk2 = AdfPage.PAGE.findComp
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);
}
}
function sayHello(event) {
event.cancel();
var source = event.getSource();
var chk1 = AdfPage.PAGE.findComponentByAbsoluteId('t2:0:sbc1');
<af:resource type="javascript">
function sayHello(event) {
var source = event.getSource();
var chk1 = source.findComponent('sbc1');
var chk2 = source.findComponent('sbc2');
var chk3 = source.findComponent('sbc3');
if (source.getId() == chk1.getId()) {
chk1.setValue(true);
chk2.setValue(false);
chk3.setValue(false);
}
else if (source.getId() == chk2.getId()) {
chk2.setValue(true);
chk1.setValue(false);
chk3.setValue(false);
}
else if (source.getId() == chk3.getId()) {
chk3.setValue(true);
chk2.setValue(false);
chk1.setValue(false);
}
event.cancel();
}
</af:resource>
但我不能让它工作
我有一个表单t2,它包含三行,每行都有一个复选框。当用户选中该复选框时,应选中该复选框,如果已选中另一个复选框,则应取消选中该复选框
只能检查一行,提交时必须检查一行
我的复选框中有以下侦听器:
<af:clientListener type="click" method="sayHello"/>
我知道,当单击任一复选框时会调用该函数,但所有复选框都保持未选中状态。我可以看到复选标记会短暂闪烁,但不会保持不变
如果我调用一个空的javascript函数,用户可以单击所有三个复选框,复选标记保留在这些框中,但它们不是互斥的,它的工作原理与我预期的一样
但当我这样写函数时:
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);
}
}
function sayHello(event) {
event.cancel();
var source = event.getSource();
var chk1 = AdfPage.PAGE.findComponentByAbsoluteId('t2:0:sbc1');
<af:resource type="javascript">
function sayHello(event) {
var source = event.getSource();
var chk1 = source.findComponent('sbc1');
var chk2 = source.findComponent('sbc2');
var chk3 = source.findComponent('sbc3');
if (source.getId() == chk1.getId()) {
chk1.setValue(true);
chk2.setValue(false);
chk3.setValue(false);
}
else if (source.getId() == chk2.getId()) {
chk2.setValue(true);
chk1.setValue(false);
chk3.setValue(false);
}
else if (source.getId() == chk3.getId()) {
chk3.setValue(true);
chk2.setValue(false);
chk1.setValue(false);
}
event.cancel();
}
</af:resource>
}
复选标记立即消失
我已尝试删除“event.cancel()”;但这没什么区别
我甚至可以用一个输入字段替换我找到的组件,输入字段的格式和文本都相同。文本显示在输入字段中,但复选标记立即从复选框中消失
我研究过:
我做错了什么
谢谢
金姆
编辑:
我创建了以下非常简单的页面:
<?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>
函数sayHello(事件){
event.cancel();
var source=event.getSource();
var chk1=AdfPage.PAGE.findComponentByAbsoluteId('sbc1');
var chk2=AdfPage.PAGE.findComponentByAbsoluteId('sbc2');
var chk3=AdfPage.PAGE.findComponentByAbsoluteId('sbc3');
如果(源==chk1){
chk1.设定值(真);
chk2.设定值(假);
chk3.设定值(假);
}
else if(source==chk2){
chk2.设定值(真);
chk1.设置值(假);
chk3.设定值(假);
}
else if(source==chk3){
chk3.设定值(真);
chk2.设定值(假);
chk1.设置值(假);
}
}
我看到了完全相同的奇怪行为……我似乎无法选中该复选框。复选标记只是消失了
有什么意见吗?我被困在这里了
/
Kim尝试用如下内容替换javascript函数:
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);
}
}
function sayHello(event) {
event.cancel();
var source = event.getSource();
var chk1 = AdfPage.PAGE.findComponentByAbsoluteId('t2:0:sbc1');
<af:resource type="javascript">
function sayHello(event) {
var source = event.getSource();
var chk1 = source.findComponent('sbc1');
var chk2 = source.findComponent('sbc2');
var chk3 = source.findComponent('sbc3');
if (source.getId() == chk1.getId()) {
chk1.setValue(true);
chk2.setValue(false);
chk3.setValue(false);
}
else if (source.getId() == chk2.getId()) {
chk2.setValue(true);
chk1.setValue(false);
chk3.setValue(false);
}
else if (source.getId() == chk3.getId()) {
chk3.setValue(true);
chk2.setValue(false);
chk1.setValue(false);
}
event.cancel();
}
</af:resource>
函数sayHello(事件){
var source=event.getSource();
var chk1=source.findComponent('sbc1');
var chk2=source.findComponent('sbc2');
var chk3=source.findComponent('sbc3');
if(source.getId()==chk1.getId()){
chk1.设定值(真);
chk2.设定值(假);
chk3.设定值(假);
}
else if(source.getId()==chk2.getId()){
chk2.设定值(真);
chk1.设置值(假);
chk3.设定值(假);
}
else if(source.getId()==chk3.getId()){
chk3.设定值(真);
chk2.设定值(假);
chk1.设置值(假);
}
event.cancel();
}
您是否尝试提醒您收到的值。例如,您是否尝试发出警报(source.getValue());看看你收到了什么。另外,您是否确保chk1、chk2和chk3实际上已成功创建。我相信您的比较应该基于Id,而不是相等源。getId()==chk1.getId()