循环中的ADF Faces 1.1的javaScript

时间:2010-10-14 15:26:24

标签: javascript jsf xhtml javascript-events oracle-adf

我在ADF Faces af:interator中遇到了我的js函数问题。我在af中有3个控件:iterator(af:ouputText,af:inputText,af:selectBooleanCheckBox),我希望在复选框上有一个js函数,这样当选中复选框时,ouputText的文本将被复制到inputText。

这里的问题是在af:iterator中,adf将生成自己的id或为id附加一个奇怪的数字,我不确定是否应该依赖那些生成的id来编写我的js函数。我知道我应该使用PPR,但我不能。

非常感谢!

2 个答案:

答案 0 :(得分:1)

为什么你不能使用PPR?根本不应该依赖js ID,当我们决定将你的任务流放在一个区域或一个portlet内时,它们会改变。

字段值应基于VO属性,如果它们不是DB支持,则可以创建瞬态VO。然后更新VO上的值并调用

AdfFacesContext.getCurrentInstance().addPartialTarget(JSFUtils.findComponent("<comp_id of parent component>"));

答案 1 :(得分:1)

您可以使用<af:clientAttribute/> and <af:clientListener/>和一些javascript的组合来实现此行为。

您还需要在<af:inputText/>上将clientComponent设置为true。

这适用于我的测试程序。

<af:document id="d1">
  <af:resource type="javascript">
    function copyFromTo(evt) {
        fromValue = evt.getSource().getProperty('fromValue');
        fromIndex = evt.getSource().getProperty('fromIndex');
        // iterator ID, then fromIndex, then inputText ID 
        id = 'i1:'+fromIndex+':it1'; 
        inputComponent = AdfPage.PAGE.findComponentByAbsoluteId(id);
        inputComponent.setValue(fromValue);
    }
  </af:resource>
  <af:form id="f1">
    <af:panelStretchLayout id="psl1">
      <f:facet name="center">
        <af:iterator id="i1" value="#{PageBean.outputTextValues}" var="row" varStatus="rowStatus">
          <af:panelGroupLayout id="pgl1" layout="horizontal">
            <af:selectBooleanCheckbox label="Copy" id="sbc1">
              <af:clientAttribute name="fromValue" value="#{row}"/>
              <af:clientAttribute name="fromIndex" value="#{rowStatus.index}"/>
              <af:clientListener method="copyFromTo" type="click"/>
            </af:selectBooleanCheckbox>
            <af:spacer width="10" height="10" id="s1"/>
            <af:outputText value="#{row}" id="ot1"/>
            <af:spacer width="10" height="10" id="s2"/>
            <af:inputText label="Label 1" id="it1" value="none" clientComponent="true"/>
          </af:panelGroupLayout>
        </af:iterator>
        <!-- id="af_one_column_stretched"   -->
      </f:facet>
    </af:panelStretchLayout>
  </af:form>
</af:document>