Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Oracle ADF复选框处于丢失状态_Javascript_Oracle_Oracle Adf - Fatal编程技术网

Javascript Oracle ADF复选框处于丢失状态

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

我使用的是jdev12c

我正在尝试实现一些复选框作为单选按钮,如下所示:

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