【问题标题】:RICH:dataTable - add new rowRICH:dataTable - 添加新行
【发布时间】:2011-08-27 20:17:42
【问题描述】:

如何在列表末尾向extendedDataTable 添加新行?有什么解决办法吗?

JSF 表示例:

你能帮帮我吗?

更新

我可以使用例如 Rich:popupPanel 添加新项目,但不能通过在数据表中创建新行来添加。我想说的是,我可以保存但没有使用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 
}

【问题讨论】:

  • 什么版本的richfaces/jsf?
  • 你能在支持 dataTable 的集合中添加一个新元素,然后重新渲染组件吗?
  • (我已经编辑了我的帖子)我只是添加新项目和重新渲染数据表,但不使用集合
  • 您是否有机会发布 xhtml 和支持 bean 以便我们可以看到它现在是如何工作的?我认为以这种方式更容易看到您要完成的工作。
  • 好的。因此,您的列表由一个集合支持:私有 List dataListBde;。因此,如果您向该集合添加一个新的 BDE() 并重新呈现数据表,您的新行将显示出来。然后,您可以保存集合以持久保存它。我错过了什么?

标签: jsf richfaces


【解决方案1】:

您的 dataTable 正在为 Collection 建模:

private List<BDE> dataListBde;

要添加新行,您只需将新的 BDE() 添加到集合中。

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

然后您可以重新渲染您的数据表以查看新行。

最后,在您的 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>

【讨论】:

  • 漂亮而简单。非常感谢你,戴夫! :-)
【解决方案2】:

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

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

适应 Richfaces 应该不是什么大问题。

【讨论】:

  • 谢谢,我会努力适应的。我的 JSF 表是使用 BalusC 指南制作的。但我认为 rich:dataTable 可以包含这样的功能......
猜你喜欢
  • 2013-05-24
  • 2012-06-14
  • 1970-01-01
  • 1970-01-01
  • 2017-11-11
  • 2011-11-05
  • 1970-01-01
  • 1970-01-01
  • 2011-10-19
相关资源
最近更新 更多