2010-05-03 6 views
2

En venant d'ASP.NET, j'ai du mal avec les concepts de base de l'ADF.Comment lier une table ADF sur un bouton cliquez

Je dois lier une table sur un clic de bouton, et pour une raison que je ne comprends pas (je penche pour le cycle de vie de la page, ce qui est différent d'ASP.NET) cela ne fonctionne pas.

Ceci est mon code ADF:

<af:commandButton text="#{viewcontrollerBundle.CMD_SEARCH}" 
    id="cmdSearch" 
    action="#{backingBeanScope.indexBean.cmdSearch_click}" 
    partialSubmit="true"/> 

<af:table var="row" rowBandingInterval="0" id="t1" 
        value="#{backingBeanScope.indexBean.transactionList}" 
        partialTriggers="::cmdSearch" 
        binding="#{backingBeanScope.indexBean.table}"> 
      <af:column sortable="false" headerText="idTransaction" id="c2"> 
       <af:outputText value="#{row.idTransaction}" id="ot4"/> 
      </af:column> 
      <af:column sortable="false" headerText="referenceCode" id="c5"> 
       <af:outputText value="#{row.referenceCode}" id="ot7"/> 
      </af:column> 
      </af:table> 

C'est cmdSearch_click:

public String cmdSearch_click() { 
    List l = new ArrayList(); 
    Transaction t = new Transaction(); 
    t.setIdTransaction(BigDecimal.valueOf(1)); 
    t.setReferenceCode("AAA"); 
    l.add(t); 

    t = new Transaction(); 
    t.setIdTransaction(BigDecimal.valueOf(2)); 
    t.setReferenceCode("BBB"); 
    l.add(t); 

    setTransactionList(l); 

    // AdfFacesContext.getCurrentInstance().addPartialTarget(table); 

    return null; 
} 

La ligne commentée ne fonctionne pas non plus.

Si je remplis la liste sur le constructeur de mon Bean, la table s'affiche correctement.

Des idées?

+0

J'ai changé ma portée de haricot de sauvegarde à la demande, toujours le même problème – juan

+0

J'ai changé la portée en session et cela a fonctionné ... Je suppose que je devrais rechercher des portées un peu – juan

Répondre

2

C'était une question de portée.

Après avoir lu this post, je pense que la bonne façon de le faire est de mettre à viewScope

Si quelqu'un pense que cela est incorrect, s'il vous plaît laissez-moi savoir. Pour l'instant c'est ma réponse.

+0

plus d'info http://download.oracle.com/ docs/cd/E12839_01/web.1111/b31973/af_lifecycle.htm # CHDGGGBI – juan

0

Je ne suis pas sûr que la portée du bean backing soit la bonne que vous voulez utiliser. Je suggère soit pageFlowScope ou la portée de la session. Ceux-ci seront les plus proches de ce que vous voulez modéliser. PageFlowScope suit ce sur quoi l'utilisateur clique. Ainsi, deux instances de la même application Web/du même utilisateur ont des portées PageFlow différentes.

La portée de session est commune à toutes les instances de l'application Web par le même utilisateur.

La portée de l'application est commune à tous les utilisateurs. J'éviterais cela presque toujours.

La portée de la requête ne dure que entre les demandes d'affichage. Pas vraiment utile sauf pour les données de durée extrêmement courte.

0

Vous ne devez pas le définir sur sessionScope. Il serait alors valide jusqu'à ce que la session utilisateur soit active. Vous pouvez utiliser pageFlowScope (valide pour la durée de vie d'une page) ou requestScope valide à partir du moment où une demande est faite par le client jusqu'à ce qu'il reçoive une réponse.

Questions connexes