2011-05-18 125 views
1

如何将新行添加到列表末尾的extendedDataTable?有一些解决方案吗?RICH:dataTable - 添加新行

JSF表例如:

enter image description here

你能帮助我吗?

UPDATE

我可以在使用例如丰富的添加新项:popupPanel,但不是在数据表中创建一个新的行。我想说的是,我可以保存但不像使用BalusCs JSF guide那样优雅。 XHTML的

部分:BEAN的

<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> 


部分: 包常见;

@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 
} 
+0

什么RichFaces的/ JSF的版本? – 2011-05-18 12:48:37

+0

JSF 2,RichFaces 4 ... – gaffcz 2011-05-18 12:51:17

+0

你可以添加一个新元素到支持dataTable的集合然后reRender组件吗? – 2011-05-18 13:02:13

回答

2

你的数据表上造型宝典:

private List<BDE> dataListBde; 

要添加新行你就只需要添加一个新的BDE()到集合中。

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

然后你可以reRender你的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> 
+0

好,简单。非常感谢,戴夫! :-) – gaffcz 2011-05-18 16:20:12

+0

很高兴我能帮忙。 – 2011-05-18 16:24:37

3

一般JSF的做法是在支持Bean底层列表的末尾,如果该行元素包含的数据添加一个空的元素,然后在你的dataTable渲染h:outputTexth:inputText或其他一些输入如果行元素为空,则为组件。

查看BalusC's blog entry on "Using datatables"举例。

它适应Richfaces应该不是一个大问题。

+0

谢谢,我会尽量适应它。我的JSF表格使用BalusC指南制作而成。但我认为丰富:dataTable可能有这样的功能包括... – gaffcz 2011-05-18 09:42:31