ajax - h:dataTable content displayed on .jsf page load,instead of commandLink click only -


looks simple,but doesn't work)

when .jsf page loaded ,values db shown.
dao impl chunk:

public list<product> getproducts() {     return gethibernatetemplate().find("from product");  } 

managed bean chunk:

public list<product> getproducts() {     return this.getproductmanager().getproducts(); } 

i intented,that f:ajax work click only:

         <h:form>              <h:commandlink value="show" action="nothing">                 <f:ajax render="pr"/>             </h:commandlink>               <h:datatable var="product" id="pr" value="#{showproducts.products}">                   <h:column>#{product.name}</h:column>             </h:datatable>           </h:form> 

and data visible on page,when it's loaded. firebug can see,that data refreshed click, ajax it's work.

do need additional attributes h:datatable element table content displayed on click only?

thank you.

you need hide datatable on initial request , let commandlink toggle boolean datatable's rendered attribute depending on.

facelets:

<h:form>     <h:commandlink value="show" action="#{showproducts.toggleshow}">         <f:ajax render="products"/>     </h:commandlink>     <h:panelgroup id="products">         <h:datatable var="product" value="#{showproducts.products}" rendered="#{!showproducts.show}">             <h:column>#{product.name}</h:column>         </h:datatable>     </h:panelgroup> </h:form> 

bean:

private boolean show;  public void toggleshow() {     show = !show; // or show = true; }  public boolean isshow() {     return show; } 

that said, it's not best practice run expensive business/database logic inside getter. getter can called more once in bean's life. rather job in bean's constructor or @postconstruct method.

private list<product> products;  @postconstruct public void init() {     products = this.getproductmanager().getproducts(); }  public list<product> getproducts() {     return products; } 

or if needs lazily loaded, rather so:

private list<product> products;  public list<product> getproducts() {     if (products == null) {         products = this.getproductmanager().getproducts();     }     return products; } 

Comments

Popular posts from this blog

android - Spacing between the stars of a rating bar? -

aspxgridview - Devexpress grid - header filter does not work if column is initially hidden -

c# - How to execute a particular part of code asynchronously in a class -