有人可以解释一下JSF是否可以在点击复选框时重新呈现已禁用的数据表?
答案 0 :(得分:2)
您可以使用ajax Listener
执行此操作你需要的是一个布尔值来知道表是否被禁用(参见托管bean中的boolean disabled)
接下来是一个方法,只要调用它就会改变这个布尔值(参见xhtml中的selectBooleanCheckbox
和rendered="#{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;
}
}