2010-10-14 5 views
0

Je rencontre un problème avec ma fonction js dans un ADF Faces af: interator. J'ai 3 contrôles dans un af: itérateur (af: ouputText, af: inputText, af: selectBooleanCheckBox) et je voudrais avoir une fonction js sur la case à cocher de sorte que lorsque vous cochez la case, le texte du ouputText sera copié dans l'entréeText. Le problème ici est que dans l'af: itérateur, adf va générer son propre id ou ajouter un nombre bizarre pour les identifiants et je ne suis pas sûr si je devrais compter sur ces ids générés pour écrire ma fonction js. Je sais que je devrais utiliser PPR pour cela, mais je ne peux pas.javaScript pour ADF Faces 1.1 dans une boucle

Merci beaucoup! Pourquoi ne pouvez-vous pas utiliser PPR?

Répondre

1

Vous pouvez utiliser une combinaison de <af:clientAttribute/> and <af:clientListener/> et certains javascript pour obtenir ce comportement.

Vous devez également définir clientComponent sur true sur <af:inputText/>.

Cela fonctionne dans mon programme de 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> 
1

Les ID js ne devraient pas être du tout utilisés, et ils changeront quand nous dirons que vous décidez de mettre votre flux de tâches dans une région ou dans un portlet. Les valeurs de champ doivent être basées sur les attributs VO. Si elles ne sont pas sauvegardées par DB, vous pouvez créer une VO transitoire. puis mettre à jour les valeurs de la VO et appellent

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