RICH:dataTable - 添加新行

时间:2011-05-18 07:58:14

标签: jsf richfaces

如何在列表末尾的extendedDataTable中添加新行?有一些解决方案吗?

JSF表示例:

enter image description here

你能帮助我吗?

更新

我可以使用例如rich:popupPanel添加新项目,但不能在datatable中创建新行。我想说的是,我能够保存但不像使用BalusCs JSF guide那样优雅。

XHTML的一部分:

<rich:extendedDataTable 
 id="tableDetail"
 value="#{myBdeCheck.dataListBde}"
 var="bdeItem">

<rich:column width="80px">
  <f:facet name="header">
     <h:outputText value="Směna" />
  </f:facet>
  <h:outputText value="#{bdeItem.dayShift}"/>
</rich:column>

<rich:column width="70px">
  <f:facet name="header">
     <h:outputText value="Karta" />
  </f:facet>
  <h:outputText value="#{bdeItem.bdeno}"/>
</rich:column>


                       

BEAN的一部分: 包常见;

@ViewScoped
@ManagedBean(name="myBdeCheck")
public class MyBdeCheck extends Tools
{
  /**/
  private static final long serialVersionUID = -6586004426692130933L;

  private Session session; 
  private List<BDE> dataListBde; //= new ArrayList<BDE>();
  private int currentIndexDetail;   // index for BDEDetail datatable

  private BDECheckView editedWork;  // one item of BdeCheckView
  private BDE BDEItem;              // one item of BdeData

  // Constructor 
  public MyBdeCheck()
  {
    editedWork = new BDECheckView();
    BDEItem = new BDE();
  }

  /** GET DATA FROM BDEData *******************
   * @param personalNum, dayShift [whole day: YYYY-MM-DD%]
   */
  private void criteriaCheck()
  {
    try 
    {
      Criteria criteria = session.createCriteria(BDE.class);
      {some restrictions}
      dataListBde = criteria.list();
    }  
    catch (Exception e) {...}
   }

  public void saveBde()
  {    
    try
    {
      DaoCrud.update(dataListBde, 'R');  // ulozeni do dtb
    }
    catch  {...}  
  }

  public void saveNew() {...}

// and GETTERS AND SETTERS 
}

2 个答案:

答案 0 :(得分:3)

一般的jsf方法是在backing bean的底层列表的末尾添加一个空元素,然后在dataTable中渲染h:outputText如果row元素包含数据和h:inputText或者如果row元素为空,则为其他输入组件。

有关示例,请参阅BalusC's blog entry on "Using datatables"

将它改编为Richfaces应该不是一个大问题。

答案 1 :(得分:2)

您的dataTable正在为集合建模:

private List<BDE> dataListBde;

要添加新行,您只需要向Collection添加新的BDE()。

this.dataListBde.add(new BDE());

然后你可以重新调整你的dataTable以查看新行。

最后,在你的xhtml中,你可以有条件地渲染一个inputText或outputText:

<rich:column width="70px">
    <f:facet name="header">
        <h:outputText value="Karta" />
    </f:facet>
    <h:outputText value="#{bdeItem.bdeno}" rendered="#{bdeItem.bdeno != null}"/>
    <h:inputText value="#{bdeItem.bdeno}" rendered="#{bdeItem.bdeno == null}"/>
</rich:column>