有的时候业务表单中,datatable用来作为form来传大量规格参数是很适合的。
但有时,datatable中行的数目是事先不确定的,这样就对于jsf这种组件式的,基于manage bean
的难度增加了许多。

典型的方案是:针对datatable的动态行部分用另一个页面来添加
即,加一个button,作为导航到另一个页面,这个里面就可以初始化一个针对datatable行的bean
这样就可以自己控制datatable中的行数了。

我这有个方案,利用 值变更事件,来取得应该有的行的数目,触发事件动态添加行bean。
里面有几点要注意:
       1.             <h:selectOneMenu value="#{backing_contractB.tailNumber}"
                        immediate="true" valueChangeListener="#{backing_contractB.addDe}"
                          onchange="this.form.submit()">
                        <f:selectItem itemLabel="0" itemValue="0"/>
                        <f:selectItem itemLabel="1" itemValue="1"/>
                        <f:selectItem itemLabel="2" itemValue="2"/>
                        <f:selectItem itemLabel="3" itemValue="3"/>
                        <f:selectItem itemLabel="4" itemValue="4"/>
                        <f:selectItem itemLabel="5" itemValue="5"/>
                    </h:selectOneMenu>

       这里是动态菜单的部分,触发值变更事件, immediate="true"必须的,这里也可以采用inputtext。

        2。    private List detailList = new ArrayList<ContractDe>(7);
   
                public void addDe(ValueChangeEvent vce) {
                int n= Integer.parseInt(vce.getNewValue().toString());
                 for(int i =0;i<n;i++) {
                  ContractDe cd = new ContractDe();
                 cd.setBiaodi(Integer.toString(i));
                  this.detailList.add(cd);
                        }

        if (n ==0){
            detail.setRows(0);
        }
        this.detail.setRows(n);
        FacesContext context = FacesContext.getCurrentInstance();
        context.renderResponse();

      }
    }
这里面是动态加行bean的地方,最后两句一定要加,可以帮助你正确的赋值,跳过一些验证。

datatable 中的value就是最上的detailList

这个bean要加成session,否则赋值会失效。或把这个bean 写到context里面去,以保存值。
或者定义一个额外的保存值的变量压到session map中,然后在这个bean初始化时取到也可,最方便
的还是改生存期。

<h:dataTable binding="#{backing_contractB.detail}"
                     value="#{backing_contractB.detailList}" >

相关文章:

  • 2021-05-31
  • 2021-12-09
  • 2021-05-17
  • 2022-12-23
  • 2021-05-31
  • 2021-07-25
  • 2022-02-25
  • 2021-05-29
猜你喜欢
  • 2021-12-18
  • 2022-12-23
  • 2021-05-06
  • 2021-10-27
  • 2022-12-23
  • 2021-05-13
  • 2022-12-23
相关资源
相似解决方案