Primefaces statique et dynamique des colonnes dans la datatable
Je suis à l'aide de Primefaces 5.0 pour créer une dynamique datatable.
Mon DataObject a certains champs requis et une Liste d'option "tupel" (paire clé-valeur). L'option de la liste peuvent varier en taille. Donc j'ai besoin d'un mécanisme dynamique pour afficher une Liste de DataObject dans Primefaces.DataTable.
Mon approche ressemble:
public class DataObject {
private String staticval1;
private String staticval2;
private List<Tupel> optionalValues;
//.. getter, setter, hashCode, toString.....
}
public class Tupel{
private String id;
private String value;
}
@ManagedBean
@ViewScoped
public class TableOverviewBean {
private List<DataObject> data;
@EJB
private IMyDao myDao;
@PostConstruct
public void init() {
data = myDao.findAll();
}
public List<DataObject> getData() {
return data;
}
public void setData(List<DataObject> data) {
this.data = data;
}
}
<h:form>
<p:dataTable value="#{tableOverviewBean.data}" var="data">
<p:column headerText="static1">
<h:outputText value="#{data.staticval1}" />
</p:column>
<p:column headerText="static2">
<h:outputText value="#{data.staticval2}" />
</p:column>
<p:columns value="#{data.optionalValues}" var="opt" headerText="#{opt.id}">
<h:outputText value="#{opt.value}" />
</p:columns>
</p:dataTable>
</h:form>
Mais cela ne fonctionne pas. La dynamique des colonnes ne sont pas rendus.
Comment puis-je résoudre mon problème?
EDIT:
Résultat attendu:
staticval1 | staticval2 | dynamic_id1 | dynamic_id2 | ... | dynmic_idn
----------------------------------------------------------------------
static1a | static2a | dyna_value1a| dyna_value2a | ... | dyna_valu3a
static1b | static2b | dyna_value1b| dyna_value2b | ... | dyna_valu3b
static1c | static2c | dyna_value1c| dyna_value2c | ... | dyna_valu3c
OriginalL'auteur veote | 2014-09-04
Vous devez vous connecter pour publier un commentaire.
Il n'est pas possible de définir des colonnes basées sur des données de ligne. Imaginez que la ligne 1 a 2 colonnes, la ligne 2 a 6 colonnes, de la ligne 3 a 1 colonne, etc comment voulez-vous jamais produire un techniquement valides tableau en HTML? Chaque ligne doit avoir le même nombre de colonnes.
Vous avez 2 options, selon que pouvez modifier le modèle ou pas:
Si vous ne pouvez pas changer de modèle, alors vous avez besoin de la remplacer
<p:columns>
par un seul<p:column>
et boucle sur le#{data.optionalValues}
à l'aide d'une boucle imbriquée avec, par exemple,<ui:repeat>
ou peut-être même un autre<p:dataTable><p:columns>
:Si vous pouvez modifier le modèle, vous devez laisser
<p:columns value>
point à un haricot propriété à la place d'une ligne de propriété, de sorte que c'est exactement la même pour chaque ligne. Cela fonctionne si vous remplacezList<Tupel> optionalValues
parMap<String, Tupel> optionalValues
où la clé estTupel#id
et ajouter unList<String>
propriété du bean contenant tous disponiblesTupel#id
valeurs.Avez-vous lu le 1er paragraphe? Si vous voulez réaliser la mise en page dont vous avez besoin, vous devez déplacer les données à partir de la ligne de haricot et d'un montant fixe de colonnes.
Oui j'ai lu. Mes lignes ont le même nombre de colonnes. Mais le nombre de colonnes peut varier, si je reçois un autre ensemble de données. E. g. une seule fois il y a 10 valeurs facultatives (chaque dataobject a 10). Un autre a peut-être 8 facultatif valeurs.
Je sais. Mais vous allez avoir besoin de modifier le modèle dans le cas où vous souhaitez obtenir exactement la vue souhaitée. J'ai mis à jour la réponse.
Je vous remercie beaucoup. Ai eu de travail de la deuxième approche.
OriginalL'auteur BalusC
java:
////////////////////////////////////////////
C'est un exemple.
OriginalL'auteur Zhi Bin