Pregunta

Estoy teniendo problema con mis js función dentro de un ADF Faces AF: interator. Tengo 3 controles dentro de un af: iterador (af: ouputText, af: inputText, af: selectBooleanCheckBox) y me gustaría tener un js funcionan en la casilla de modo que cuando el control de la casilla, el texto de la ouputText se copiará en la inputText.

El problema aquí es que dentro del AF: iterador, ADF generará su propia identificación o añadir un número raro para los identificadores y no estoy seguro de si debo confiar en esos identificadores de generados a escribir mi función js. Sé que debo utilizar PPR para esto, pero no puedo.

Muchas gracias!

¿Fue útil?

Solución

Se puede utilizar una combinación de <af:clientAttribute/> and <af:clientListener/> y algo de JavaScript para lograr este comportamiento.

También tendrá que establecer clientComponent true en el <af:inputText/>.

Esto funciona de mi programa de prueba.

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

Otros consejos

Por qué no puedes usar PPR? Los identificadores de js no se debe confiar en ella en absoluto, y que va a cambiar cuando digamos que usted decide poner su taskflow en una región o en el interior de un portlet.

Los valores de los campos deben basarse en los atributos de VO, si no están respaldados DB, se puede crear un VO transitoria. a continuación, actualizar los valores de la VO y llamada

AdfFacesContext.getCurrentInstance().addPartialTarget(JSFUtils.findComponent("<comp_id of parent component>"));
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top