2011-05-18 8 views
1

Comment puis-je ajouter une nouvelle ligne à extendedDataTable à la fin de la liste? Y a-t-il une solution?RICH: dataTable - ajouter une nouvelle ligne

JSF exemple de table:

enter image description here

Pouvez-vous me aider?

MISE À JOUR:

Je suis en mesure d'ajouter un nouvel article en utilisant par exemple un riche: popupPanel, mais pas en créant une nouvelle ligne dans datatable. Ce que je voulais dire, je suis capable de sauvegarder mais pas aussi élégant que d'utiliser BalusCs JSF guide.

partie de XHTML:

<rich:extendedDataTable 
id="tableDetail" 
value="#{myBdeCheck.dataListBde}" 
var="bdeItem"> 

<rich:column width="80px"> 
    <f:facet name="header"> 
    <h:outputText value="Směna" /> 
    </f:facet> 
    <h:outputText value="#{bdeItem.dayShift}"/> 
</rich:column> 

<rich:column width="70px"> 
    <f:facet name="header"> 
    <h:outputText value="Karta" /> 
    </f:facet> 
    <h:outputText value="#{bdeItem.bdeno}"/> 
</rich:column> 


partie de Bean: package commun;

@ViewScoped 
@ManagedBean(name="myBdeCheck") 
public class MyBdeCheck extends Tools 
{ 
    /**/ 
    private static final long serialVersionUID = -6586004426692130933L; 

    private Session session; 
    private List<BDE> dataListBde; //= new ArrayList<BDE>(); 
    private int currentIndexDetail; // index for BDEDetail datatable 

    private BDECheckView editedWork; // one item of BdeCheckView 
    private BDE BDEItem;    // one item of BdeData 

    // Constructor 
    public MyBdeCheck() 
    { 
    editedWork = new BDECheckView(); 
    BDEItem = new BDE(); 
    } 

    /** GET DATA FROM BDEData ******************* 
    * @param personalNum, dayShift [whole day: YYYY-MM-DD%] 
    */ 
    private void criteriaCheck() 
    { 
    try 
    { 
     Criteria criteria = session.createCriteria(BDE.class); 
     {some restrictions} 
     dataListBde = criteria.list(); 
    } 
    catch (Exception e) {...} 
    } 

    public void saveBde() 
    {  
    try 
    { 
     DaoCrud.update(dataListBde, 'R'); // ulozeni do dtb 
    } 
    catch {...} 
    } 

    public void saveNew() {...} 

// and GETTERS AND SETTERS 
} 
+0

version de richfaces/JSF? –

+0

JSF 2, RichFaces 4 ... – gaffcz

+0

pouvez-vous simplement ajouter un nouvel élément à la collection en sauvegardant le dataTable et puis reRender le composant? –

Répondre

2

Votre dataTable modélise une collection:

private List<BDE> dataListBde; 

Pour ajouter une nouvelle ligne vous juste besoin d'ajouter un nouveau BDE() à la collection.

this.dataListBde.add(new BDE()); 

Ensuite, vous pouvez simplement resRender votre table de données pour voir la nouvelle ligne.

Enfin, dans votre xhtml, vous pouvez rendre une condition inputText ou outputText:

<rich:column width="70px"> 
    <f:facet name="header"> 
     <h:outputText value="Karta" /> 
    </f:facet> 
    <h:outputText value="#{bdeItem.bdeno}" rendered="#{bdeItem.bdeno != null}"/> 
    <h:inputText value="#{bdeItem.bdeno}" rendered="#{bdeItem.bdeno == null}"/> 
</rich:column> 
+0

Nice et simple. Merci beaucoup, Dave! :-) – gaffcz

+0

Content de pouvoir aider. –

3

L'approche jsf générale serait d'ajouter un élément vide à la fin de la liste sous-jacente dans la fève de support, puis dans votre dataTable rendre h:outputText si l'élément de ligne contient des données et un h:inputText ou d'une autre entrée composant si l'élément row est vide.

Voir BalusC's blog entry on "Using datatables" pour un exemple.

Cela ne devrait pas être un gros problème de l'adapter à Richfaces.

+0

Merci, je vais essayer de l'adapter. Mes tables JSF sont faites en utilisant le guide BalusC. Mais je pensais riche: dataTable pourrait avoir une telle fonctionnalité incluse ... – gaffcz

Questions connexes