如何在列表末尾的extendedDataTable中添加新行?有一些解决方案吗?
JSF表示例:
你能帮助我吗?
更新:
我可以使用例如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
}
答案 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>