Domanda

Sto avendo problema con il mio js funzione all'interno di un ADF Faces AF: interator. Ho 3 controlli all'interno di un af: iterator (af: ouputText, af: inputText, af: selectBooleanCheckBox) e vorrei avere un js funzione la casella in modo che quando si controlla la casella, il testo del ouputText verrà copiato in l'inputText.

Il problema qui è che all'interno della AF: iteratore, adf genera un proprio ID o aggiungere un numero strano per gli ID e io non sono sicuro se devo fare affidamento su tali ID generati a scrivere la mia funzione js. So che dovrei usare PPR per questo, ma non posso.

Grazie mille!

È stato utile?

Soluzione

È possibile utilizzare una combinazione di <af:clientAttribute/> and <af:clientListener/> e un po 'di javascript per ottenere questo comportamento.

Si dovrà anche clientComponent impostato su true sul <af:inputText/>.

Questo funziona nel mio programma di test.

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

Altri suggerimenti

Perchè non si utilizza PPR? Gli ID js non devono essere considerate a tutti, e cambieranno quando diciamo che si decide di mettere il vostro taskflow in una regione o in un portlet.

I valori di campo dovrebbero essere basati su VO attributi, se non sono DB supportato, è possibile creare un VO transitoria. quindi aggiornare i valori sul VO e call

AdfFacesContext.getCurrentInstance().addPartialTarget(JSFUtils.findComponent("<comp_id of parent component>"));
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top