我正在尝试在 Primefaces 数据表中添加一个新行,然后我想提交该表的内容并执行一些业务逻辑。数据表模型是在 ViewScoped 托管 bean 中维护的集合。
我正在使用 JSF 2.1 和 Primefaces 3.3。
简短的例子:
<h:form id="my-form">
<p:dataTable value="#{testBean.list}" var="s" id="datatable">
<p:column>
<h:inputText value="#{s}"/>
</p:column>
<f:facet name="footer">
<p:commandButton value="Add row" action="#{testBean.addRow()}" process="@form" update="@form" immediate="true" />
<p:commandButton value="Do stuff" action="#{testBean.doSomeLogic()}" process="@form" update="@form"/>
</f:facet>
</p:dataTable>
</h:form>
托管 Bean:
@ManagedBean
@ViewScoped
public class TestBean implements Serializable {
private List<String> list;
public TestBean() {
}
@PostConstruct
public void init() {
list = new ArrayList<String>();
list.add("one");
list.add("two");
}
public void addRow(){
list.add(new String());
}
public void doSomeLogic(){
for (String string : list) {
System.out.println(string);
}
}
// getters and setters
}
实际发生的情况:
- 用户单击“添加行”按钮,添加一个新行(我需要立即为真,因此不进行验证,这些字段是更大表单的一部分)。
- 用户单击“do stuff”,集合具有正确的大小(包含新行),但不考虑用户的输入(既不修改预先存在的行,也不修改新添加的行中的新值)。
我该怎么做才能提交新值?我才刚刚开始接触 JSF,我不确定我是否已经 100% 掌握了它。
感谢您的帮助。
可能的重复:
- 通过 AJAX 使用请求范围的 bean 将一行添加到 h:dataTable 中,而不会丢失行数据 https://stackoverflow.com/questions/3635013/add-a-row-to-hdatatable-via-ajax-with-request-scoped-bean-without-losing-the-ro
- 如何在 JSF 中的表中动态添加行? https://stackoverflow.com/questions/2278353/how-to-dynamically-add-a-row-in-a-table-in-jsf/2280157#2280157
- JSF 数据表:添加和删除行清除行值 https://stackoverflow.com/questions/11092513/jsf-datatable-adding-and-removing-rows-clear-rows-values
Edit:感谢 Jitesh,问题得到了解决,可以在此处找到一个工作示例:JSF2,我可以动态添加JSF组件吗? https://stackoverflow.com/questions/3409053/jsf2-can-i-add-jsf-components-dynamically?lq=1
唯一的问题是您在 inputText 中使用不可变对象。要了解此检查BaluC 的回答 https://stackoverflow.com/questions/12690850/adding-inputtext-elements-dynamically-to-a-bound-datatable-empties-other-inputte
根据它的说法,“作为一个不可变的对象,字符串没有 setter 方法。永远无法设置输入的值。”
尝试从命令按钮中删除立即属性,您会发现插入每一行时数据都会被清除。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)