-2

Can someone explain if JSF can rerender a disabled data table on click of a check-box?

sgowd
  • 2,242
  • 22
  • 29

1 Answers1

2

You can do it with an ajax Listener

What you need is a boolean value to know if the table is disabled(see boolean disabled in managed bean)

next is a method that will change this boolean whenever it is called(see selectBooleanCheckbox and rendered="#{tableController.disabled}" in xhtml)

this can be applied to any boolean value like disabled/rendered etc.


Source code (xhtml):

<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:f="http://java.sun.com/jsf/core"
  xmlns:h="http://java.sun.com/jsf/html">
<h:head>
    <title>Facelet Title</title>
</h:head>
<h:body>

    <h:form>
        <h:dataTable id="table" value="#{tableController.products}" var="item" border="1" rendered="#{tableController.disabled}"
                     headerClass="table-header"
                     styleClass="table-d"
                     rowClasses="table-row">

            <h:column>
                <f:facet name="header">
                    ID
                </f:facet>
                <h:outputText value="#{item.id}"/>
            </h:column>

            <h:column>
                <f:facet name="header">
                    Name
                </f:facet>
                <h:outputText value="#{item.name}"/>
            </h:column>

            <h:column>
                <f:facet name="header">
                    Price
                </f:facet>
                <h:outputText value="#{item.price}"/>
            </h:column>

        </h:dataTable>


        <h:selectBooleanCheckbox value="Id">
            <f:ajax render="@form" listener="#{tableController.enableDisable()}"/>
        </h:selectBooleanCheckbox>
    </h:form>
</h:body>
</html>

Managed Bean:

import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

@ManagedBean
@SessionScoped
public class TableController {

private boolean disabled;
private DataModel products;

public TableController() {

    List list = new ArrayList<Product>();

    Product p1 = new Product(1, "Z", 1.1);
    Product p2 = new Product(2, "F", 2.5);
    Product p3 = new Product(3, "A", 0.9);

    list.add(p1);
    list.add(p2);
    list.add(p3);

    products = new ListDataModel<Product>(list);
}


 public void enableDisable(){
        disabled = !disabled;  
}

public boolean isDisabled() {
    return disabled;
}

public void setDisabled(boolean disabled) {
    this.disabled = disabled;
}

public DataModel getProducts() {
    return products;
}

public void setProducts(DataModel products) {
    this.products = products;
}    
}

Product Class:

public class Product {

private int id;
private String name;
private double price;


public Product(int id, String name, double price){

    this.id = id;
    this.name = name;
    this.price = price;

}

public void setId(int id) {
    this.id = id;
}

public void setName(String name) {
    this.name = name;
}

public void setPrice(double price) {
    this.price = price;
}

public int getId() {
    return id;
}

public double getPrice() {
    return price;
}

public String getName() {
    return name;
}

}
raging met
  • 356
  • 2
  • 8