Java 单击列本身中的HTMLCOMMAND按钮删除HtmlColumn

Java 单击列本身中的HTMLCOMMAND按钮删除HtmlColumn,java,jsf,jsf-2,Java,Jsf,Jsf 2,我已经在backingbean中生成了一个HtmlCommandButton。单击该按钮,我想从烘焙豆中生成的HtmlDataTable中删除HtmlColumn <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html"> <head> <meta http-equiv="Content-Type" content="text

我已经在backingbean中生成了一个
HtmlCommandButton
。单击该按钮,我想从烘焙豆中生成的
HtmlDataTable
中删除
HtmlColumn

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
        <title>JSF dynamic</title>
    </head>
    <body>        
        <h:form prependId="false">
            <br/><br/>
            <h:outputText value="Enter no. of columns : "/>            
            <h:inputText value="#{MyTest.colNos}"/>&#160;&#160;
            <h:commandButton value="add" action="#{MyTest.createTable}">                
            </h:commandButton>
            <br/><br/>
            <br/><br/>
            <h:dataTable id="table" binding="#{MyTest.hdt}">
            </h:dataTable>
        </h:form>
    </body>
</html>

JSF动态


  



MyTest.java

package com.test;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.el.MethodExpression;
import javax.el.ValueExpression;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.component.UIComponent;
import javax.faces.component.UISelectItems;
import javax.faces.component.html.HtmlColumn;
import javax.faces.component.html.HtmlCommandButton;
import javax.faces.component.html.HtmlDataTable;
import javax.faces.component.html.HtmlInputText;
import javax.faces.component.html.HtmlOutputText;
import javax.faces.component.html.HtmlSelectOneMenu;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;


@ManagedBean(name = "MyTest")
@ViewScoped
public class MyTest {

        public MyTest() {
    }
    private Integer colNos;

    public Integer getColNos() {
        return colNos;
    }

    public void setColNos(Integer colNos) {
        this.colNos = colNos;
    }
    List<Object> objects = new ArrayList<Object>();

    public List<Object> getObjects() {
        return objects;
    }

    public void setObjects(List<Object> objects) {
        this.objects = objects;
    }
    Integer countMenu1;
    Integer countMenu2;

    public Integer getCountMenu1() {
        return countMenu1;
    }

    public void setCountMenu1(Integer countMenu1) {
        this.countMenu1 = countMenu1;
    }

    public Integer getCountMenu2() {
        return countMenu2;
    }

    public void setCountMenu2(Integer countMenu2) {
        this.countMenu2 = countMenu2;
    }
    HtmlDataTable hdt;

    public HtmlDataTable getHdt() {
        return hdt;
    }

    public void setHdt(HtmlDataTable hdt) {
        this.hdt = hdt;
    }

    public void createTable() {
        hdt.getChildren().clear();
        hdt.setValueExpression("value", createValueExpression("#{MyTest.tableObjects}", List.class));
        hdt.setVar("tobject");
        for (int i = 0; i < colNos; i++) {

            HtmlColumn column = new HtmlColumn();
            HtmlCommandButton commandButton = new HtmlCommandButton();
            commandButton.setValue("Delete" + i);
            commandButton.setActionExpression(createMethodExpression("#{MyTest.deleteColumn('" + i + "')}", Void.TYPE, new Class<?>[0]));
            column.getChildren().add(commandButton);

            HtmlOutputText htmlOutputText5 = new HtmlOutputText();
            htmlOutputText5.setValue("<br/>");
            htmlOutputText5.setEscape(false);
            column.getChildren().add(htmlOutputText5);

            HtmlInputText htmlInputText = new HtmlInputText();
            htmlInputText.setValueExpression("value", createValueExpression("#{tobject.headerName}", String.class));
            column.getChildren().add(htmlInputText);

            HtmlOutputText htmlOutputText1 = new HtmlOutputText();
            htmlOutputText1.setValue("<br/>");
            htmlOutputText1.setEscape(false);
            column.getChildren().add(htmlOutputText1);

            HtmlSelectOneMenu menu1 = new HtmlSelectOneMenu();
            menu1.setValue(countMenu1);
            UISelectItems itemGroup1 = new UISelectItems();
            itemGroup1.setValueExpression("value", createValueExpression("#{tobject.dataTypes}", List.class));
            menu1.getChildren().add(itemGroup1);
            column.getChildren().add(menu1);

            HtmlOutputText htmlOutputText2 = new HtmlOutputText();
            htmlOutputText2.setValue("<br/>");
            htmlOutputText2.setEscape(false);
            column.getChildren().add(htmlOutputText2);

            HtmlSelectOneMenu menu2 = new HtmlSelectOneMenu();
            menu2.setValue(countMenu2);
            UISelectItems itemGroup2 = new UISelectItems();
            itemGroup2.setValueExpression("value", createValueExpression("#{tobject.filledBy}", List.class));
            menu2.getChildren().add(itemGroup2);
            column.getChildren().add(menu2);

            hdt.getChildren().add(column);

        }
    }
    List<TableObject> tableObjects = new ArrayList<TableObject>();

    public List<TableObject> getTableObjects() {
        if (tableObjects.isEmpty()) {
            TableObject to1 = new TableObject();
            to1.setHeaderName("");
            List<SelectItem> filledBy = new ArrayList<SelectItem>();
            filledBy.add(new SelectItem(1, "Buyer"));
            filledBy.add(new SelectItem(2, "Vendor"));
            to1.setFilledBy(filledBy);
            List<SelectItem> dataTypes = new ArrayList<SelectItem>();
            dataTypes.add(new SelectItem(1, "String"));
            dataTypes.add(new SelectItem(2, "Integer"));
            to1.setDataTypes(dataTypes);
            tableObjects.add(to1);
        }
        return tableObjects;
    }

    public void setTableObjects(List<TableObject> tableObjects) {
        this.tableObjects = tableObjects;
    }

    public void deleteColumn(String arg) {
        hdt.getChildren().remove(Integer.parseInt(arg));              
    }

    private ValueExpression createValueExpression(String valueExpression, Class<?> valueType) {
        FacesContext facesContext = FacesContext.getCurrentInstance();
        return facesContext.getApplication().getExpressionFactory().createValueExpression(
                facesContext.getELContext(), valueExpression, valueType);
    }

    private MethodExpression createMethodExpression(String valueExpression, Class<?> valueType, Class<?>[] expectedParamTypes) {
        FacesContext facesContext = FacesContext.getCurrentInstance();
        return facesContext.getApplication().getExpressionFactory().createMethodExpression(
                facesContext.getELContext(), valueExpression, valueType, expectedParamTypes);
    }

}
package.com.test;
导入java.util.ArrayList;
导入java.util.List;
导入java.util.Map;
导入javax.el.MethodExpression;
导入javax.el.ValueExpression;
导入javax.faces.bean.ManagedBean;
导入javax.faces.bean.ViewScoped;
导入javax.faces.component.UIComponent;
导入javax.faces.component.UISelectItems;
导入javax.faces.component.html.HtmlColumn;
导入javax.faces.component.html.htmlCommand按钮;
导入javax.faces.component.html.HtmlDataTable;
导入javax.faces.component.html.HtmlInputText;
导入javax.faces.component.html.htmlouttext;
导入javax.faces.component.html.HtmlSelectOneMenu;
导入javax.faces.context.FacesContext;
导入javax.faces.model.SelectItem;
@ManagedBean(name=“MyTest”)
@视域
公共类MyTest{
公共MyTest(){
}
私有整数colNos;
公共整数getColNos(){
返回colNos;
}
公共无效集合colNos(整数colNos){
this.colNos=colNos;
}
列表对象=新的ArrayList();
公共列表getObjects(){
归还物品;
}
公共void集合对象(列出对象){
this.objects=对象;
}
整数countMenu1;
整数countMenu2;
公共整数getCountMenu1(){
返回计数菜单1;
}
public void setCountMenu1(整数countMenu1){
this.countMenu1=countMenu1;
}
公共整数getCountMenu2(){
返回countMenu2;
}
public void setCountMenu2(整数countMenu2){
this.countMenu2=countMenu2;
}
HtmlDataTable hdt;
公共HtmlDataTable getHdt(){
返回hdt;
}
公共void setHdt(htmldataable hdt){
this.hdt=hdt;
}
公共void createTable(){
hdt.getChildren().clear();
setValueExpression(“value”,createValueExpression(“#{MyTest.tableObjects}”,List.class));
hdt.setVar(“tobject”);
对于(int i=0;i”);
htmlOutputText5.setEscape(false);
column.getChildren().add(htmlOutputText5);
HtmlInputText HtmlInputText=新的HtmlInputText();
setValueExpression(“value”,createValueExpression(“#{tobject.headerName}”,String.class));
column.getChildren().add(htmlInputText);
HtmlOutputText htmlOutputText1=新的HtmlOutputText();
HtmlOuttext1.setValue(“
”); htmlOutputText1.setEscape(false); column.getChildren().add(htmloutputtex1); HtmlSelectOneMenu menu1=新建HtmlSelectOneMenu(); menu1.设置值(countMenu1); UISelectItems itemGroup1=新UISelectItems(); itemGroup1.setValueExpression(“value”,createValueExpression(“#{tobject.dataTypes}”,List.class)); menu1.getChildren().add(itemGroup1); column.getChildren().add(menu1); HtmlOutputText htmlOutputText2=新的HtmlOutputText(); HtmlOuttext2.setValue(“
”); htmlOutputText2.setEscape(false); column.getChildren().add(htmlOutputText2); HtmlSelectOneMenu menu2=新建HtmlSelectOneMenu(); menu2.setValue(countMenu2); UISelectItems itemGroup2=新UISelectItems(); itemGroup2.setValueExpression(“value”,createValueExpression(“#{tobject.filledBy}”,List.class)); menu2.getChildren().add(itemGroup2); column.getChildren().add(menu2); hdt.getChildren().add(列); } } List tableObjects=new ArrayList(); 公共列表getTableObjects(){ if(tableObjects.isEmpty()){ TableObject to1=新的TableObject(); to1.setHeaderName(“”); List filledBy=new ArrayList(); 添加(新选择项(1,“买方”); 添加(新选择项(2,“供应商”); to1.setFilledBy(filledBy); 列表数据类型=新的ArrayList(); 添加(新选择项(1,“字符串”); 添加(新的SelectItem(2,“整数”); to1.设置数据类型(数据类型); tableObjects.add(to1); } 返回表对象; } 公共void setTableObjects(列出tableObjects){ this.tableObjects=tableObjects; } 公共void deleteColumn(字符串参数){ getChildren().remove(Integer.parseInt(arg)); } 私有值表达式createValueExpression(字符串值表达式,类值类型){ FacesContext FacesContext=FacesContext.getCurrentInstance(); 返回facesContext.getApplication().getExpressionFactory().createValueExpression( facesContext.getELContext(),valueExpression,valueType); } 私有方法表达式createMethodExpression(字符串值表达式、类值类型、类[]expectedParamTypes){ FacesContext FacesContext=FacesContext.getCurrentInstance(); 返回面孔
<h:dataTable id="dataTable" binding="#{backingBean.tableComponent}" value="#{backingBean.someList}">
//---

SomeObject selectedObject = (SomeObject) tableComponent.getRowData();

someList.remove(selectedObject);

//--