Primefaces: mettre en page sur datatable
J'ai un datatable dans primefaces et je veux, quand j'ajoute une ligne dans, voir la dernière page de la datatable.
Mon .page xhtml est:
<h:form id=...>
...
<p:dataTable var="webTemplate" id="templateTable" widgetVar="tbl1"/>
...
</h:form>
<h:form id=...>
...
<p:inputText id="txt_description" value="#{templateController.templateDescription}" label="templateDescription">
<f:validateLength for="txt_name" minimum="1"/>
<p:ajax event="change"
listener="#{calculatePageTable.setPageTableTemplate}" onsuccess="setTabIndexTT()"/>
</p:inputText>
...
</h:form>
<script type="text/javascript">
function setTabIndexTT(){
tbl1.getPaginator().setPage(#{calculatePageTable.pageTableTemplate});
}
</script>
bean:
@ManagedBean
@SessionScoped
public class CalculatePageTable {
private int pageTableTemplate = 0;
private int pageTableField = 0;
public void setPageTableTemplate() {
final DataTable d = (DataTable) FacesContext.getCurrentInstance().getViewRoot()
.findComponent("form:templateTable");
pageTableTemplate = d.getPageCount() - 1;
}
public int getPageTableTemplate() {
return pageTableTemplate;
}
public void setPageTemplateField() {
final DataTable d = (DataTable) FacesContext.getCurrentInstance().getViewRoot()
.findComponent("detailsTable:webTemplateUpdateTable");
pageTableField = (d.getPageCount() - 1);
}
public int getPageTableField() {
return pageTableField;
}
}
Mais le js fonction setTabIndexTT() n'est jamais appelée par onsuccess ajax...
Comment je peux mettre la dernière page de ma datatable lors de l'ajout d'une ligne?
Primefaces version 3.1.1
OriginalL'auteur 3vi | 2012-04-04
Vous devez vous connecter pour publier un commentaire.
Dans votre managed bean, vous pouvez essayer ce code:
Appeler cette méthode lorsque vous ajoutez une nouvelle ligne
d.setFirst(first);
. Dans mon cas, j'ai utilisé:((DataTable) FacesContext.getCurrentInstance().getViewRoot().findComponent("myForm").findComponent("myDataTable")).setFirst(0)
pour aller à la première page à chaque fois que j'actualise le contenu.Je peux savoir qu'est-ce que
ROWS_DATATABLE
indiquant ici ?? confusJe suppose que l'aide de la liaison de l'attribut de primefaces-datatable rend le code plus propre (pas codé en dur ids)
Comment pouvez-vous modifier le datatable page? Ce code ne met la dernière ligne entrée au début.
OriginalL'auteur Teg
si le datatable widgetVar est dataTableWidget puis utilisez ceci:
PF('dataTableWV').paginator.setPage(PF('dataTableWV').paginator.cfg.pageCount - 1);
RequestContext.getCurrentInstance().execute("PF('dataTableWV').paginator.setPage(PF('dataTableWV').paginator.cfg.pageCount - 1);");
OriginalL'auteur ehsan
Je le ferais sans JavaScript. Primefaces du datatable a un
first
attribut, ce qui est l'indice de la première des données à afficher.Et le backing bean:
Vous avez raison, j'ai supervisé. cette solution ne fonctionne que lorsque le backing bean de session étendue (ce qui est le cas dans l'échantillon) et le
addRow
action crée un nouveau point de vue. Vous pouvez le faire par retour de l'actuel viewId au lieu de définiraddRow
comme nulle.Désolé, mais je n'ai pas unterstand comment je peux créer un nouveau point de vue...
il suffit d'écrire " retour "de mavue"; " dans votre addRow action à la fin. où " mavue est le nom de la page xhtml la table est en. cela permettra d'aci pour créer un nouveau point de vue au lieu de prendre celui en cours.
Votre solution fonctionne très bien, mais pas pour moi en ce moment. J'ai un backing bean vue étendue, qui ont addRow() et liste de tableaux pour l'élément de datatable et un backing bean session étendue pour calculer le premier élément. Dans la première backing bean, j'utilise une variable temp pour créer une nouvelle ligne (c'est créer avec plus de mesure et puis il est enregistré dans une base de données), et si je retourne une nouvelle vue dans addRow(), j'ai perdu variable temp...mmm...
OriginalL'auteur fischermatte
Vous pouvez éviter l'explicite ID dans votre code à l'aide de fixations:
xhtml:
bean:
OriginalL'auteur schnatterer