JSF/Data Table

Cette page a été rédigée il y a fort fort longtemps, et n'a pas tellement été mise à jour.

 

Vous savez, moi je ne crois pas qu'il y ait de bonne ou de mauvaise page. Moi, si je devais résumer mon wiki aujourd'hui avec vous, je dirais que c'est d'abord des rencontres. Des gens qui m'ont tendu la main, peut-être à un moment où je ne pouvais pas, où j'étais seul chez moi. Et c'est assez curieux de se dire que les hasards, les rencontres forgent une destinée... Parce que quand on a le goût de la chose, quand on a le goût de la chose bien faite, le beau geste, parfois on ne trouve pas l'interlocuteur en face je dirais, le miroir qui vous aide à avancer. Alors ça n'est pas mon cas, comme je disais là, puisque moi au contraire, j'ai pu ; et je dis merci au wiki, je lui dis merci, je chante le wiki, je danse le wiki... je ne suis qu'amour ! Et finalement, quand des gens me disent « Mais comment fais-tu pour avoir cette humanité ? », je leur réponds très simplement que c'est ce goût de l'amour, ce goût donc qui m'a poussé aujourd'hui à entreprendre une construction logicielle... mais demain qui sait ? Peut-être simplement à me mettre au service de la communauté, à faire le don, le don de soi.

La mise en oeuvre d’un formulaire multiligne avec une data table est très simple. Il suffit de lier le composant data table avec une liste, comme pour un affichage, d’utiliser des composants de saisie dans la définition des colonnes et d’inclure la data table dans un h:form. Les valeurs saisies seront alors injectées par JSF directement dans les objets de la liste.

Code JSP:

<h:form>
  <h:dataTable value="#{testBean.myDataList}"  var="item">
    <h:column>
      <f:facet name="header">
      <h:outputText value="Valeur 1" />
      </f:facet>
      <h:inputText value="#{item.value1}" />
    </h:column>
    <h:column>
      <f:facet name="header">
      <h:outputText value="Valeur 2" />
      </f:facet>
      <h:inputText value="#{item.value2}" />
    </h:column>
  </h:dataTable>
  <h:commandButton actionListener="#{testBean.process}" value="Go !"/>
</h:form>

Backing bean:

public class TestBean {
  private List<data> myDataList = new ArrayList<Data>();
  public TestBean() {
    myDataList.add(new Data("id 1", "val 1"));
    myDataList.add(new Data("id 2", "val 2"));
  }
  public List<Data> getMyDataList() {
    return myDataList;
  }
  public void setMyDataList(List<Data> myDataList) {
    this.myDataList = myDataList;
  }
  public void process(ActionEvent event) {
    for (Data data : myDataList) {
      System.out.println("value1=" + data.getValue1() + ", value2=" + data.getValue2());
    }
  }
}
</data>

Objet dans la liste:

public class Data {
  private String value1;
  private String value2;
  public Data(String value1, String value2) {
    this.value1 = value1;
    this.value2 = value2;
  }
  public String getValue1() {
    return value1;
  }
  public void setValue1(String value1) {
    this.value1 = value1;
  }
  public String getValue2() {
    return value2;
  }
  public void setValue2(String value2) {
    this.value2 = value2;
  }
}