JSF重新渲染禁用表吗?

时间:2012-09-25 14:19:59

标签: jsp ajax4jsf

有人可以解释一下JSF是否可以在点击复选框时重新呈现已禁用的数据表?

1 个答案:

答案 0 :(得分:2)

您可以使用ajax Listener

执行此操作

你需要的是一个布尔值来知道表是否被禁用(参见托管bean中的boolean disabled)

接下来是一个方法,只要调用它就会改变这个布尔值(参见xhtml中的selectBooleanCheckboxrendered="#{tableController.disabled}"

这可以应用于任何布尔值,如禁用/渲染等。


源代码(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;
}    
}

产品类别:

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;
}

}