无法通过单击Vaadin中表的列内的ui组件来选择表行

时间:2016-04-27 08:46:52

标签: vaadin vaadin7

我正在使用Vaadin Framework创建一个Web应用程序,但却遇到了一个表元素(Filter表)。我的表有一个列,每行包含ComboBox组件,现在表中的组合框正常工作,但是我无法点击该列来选择表值。可以通过单击表中的行来选择行。组合框和列边界之间的空间不能通过单击组合框本身来选择。  我搜索了很多,发现https://vaadin.com/forum/#!/thread/988648/988647,试图实施黑板插件,但没有成功。我的代码大致在下面。

PagedFilterTable<IndexedContainer> filterTable;
     `public static PagedFilterTable<IndexedContainer> buildPagedFilterTable()
         {
                    filterTable = new PagedFilterTable<IndexedContainer>();
                    filterTable.setFilterBarVisible(true);
                    filterTable.setSelectable(true);
                    filterTable.setImmediate(true);
                    filterTable.setMultiSelect(true);
                    filterTable.setRowHeaderMode(RowHeaderMode.INDEX);
                    filterTable.setColumnCollapsingAllowed(true);
                    filterTable.setContainerDataSource(buildContainer());
                    filterTable.setVisibleColumns((Object[]) new String[] {
                            "Clear", "Name" });
                    return filterTable;
                }` 
          static int f=1;
                private static Container buildContainer() {
                    IndexedContainer cont = new IndexedContainer();


                    cont.addContainerProperty("Clear", Component.class, null);// added combobox component
                    cont.addContainerProperty("Name", String.class, null);


                    //populating table with database values (table rows will be = no. of rows in db)
                    Connection con;
                    ResultSet rs;
                    Statement cs;   
                    try {

                        Class.forName("oracle.jdbc.driver.OracleDriver");
                        con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","system","CGoracle");
                        cs=con.createStatement();
                        co=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
                        rs = cs.executeQuery("select * from ECS_CURRENT");  
                        while(rs.next())
                        {

                             ComboBox select_reason_return=new ComboBox();          
                            select_reason_return.setInputPrompt("Select");
                            select_reason_return.setVisible(true);
                            select_reason_return.setNullSelectionAllowed(false);
                            select_reason_return.setInvalidAllowed(false);
                            select_reason_return.addItem("1.A/c Closed/Transfered");
                            select_reason_return.addItem("2.No Such A/c");
                            select_reason_return.addItem("3.Clear");

                            select_reason_return.select("3.Clear");
                            select_reason_return.addListener(new Property.ValueChangeListener() {


                                @Override
                                public void valueChange(ValueChangeEvent event) {

                                    String reason=select_reason_return.getValue().toString();
                            rowId=FilterTable.getValue();
                            Notification.show("row id is ="+rowId);
            }
                        });

                             cont.addItem(f);

                                cont.getContainerProperty(f, "Clear").setValue(select_reason_return);
                                cont.getContainerProperty(f, "Name").setValue(rs.getString(10));

                            f++;

                        }

                    } 
                    catch (SQLException | ClassNotFoundException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } 

                    return cont; 
              }

If it helps, I'm posting screenshots, Image 1: if I select anywhere other than the combobox, it is returning row id properly.Image 2: Though I'm selecting an item from combobox, table row is not getting seleced, hence it's not returning me row id. 除了黑板插件之外还有其他选择吗?如果没有,那么请帮我解决这个问题。

1 个答案:

答案 0 :(得分:0)

这不是最好的方法,但是,你可以通过以下方式实现:在ComboBox上放置一个监听器,以便知道它何时被点击。然后,在这种情况下,您获得与ComboBox关联的行,以最终获得与该行关联的ID。

获得行ID后,使用Table.select()方法选择项目行。

这不是最好的方法,如果你有很多行,你会感觉它的响应速度很慢,但这是我发现让它运行的唯一程序化方法。希望它有所帮助。