我有一个带有属性editable =" true"的primefaces数据表所以我无法动态编辑行。我有两个字段:inputText和selectOneMenu。我希望能够从页脚动态添加行。我在页脚中添加了空字段,当用户单击按钮时,我想将新行添加到具有正确值的数据表中。
这是我的代码:
<h:form>
...
<p:dataTable value="#{bean.myObjects}" id="myDatatable" editable="true" var="obj">
<f:facet name="header">
<h:outputText value="My Datatable" />
</f:facet>
<p:column headerText="My String value">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{obj.myString}" />
</f:facet>
<f:facet name="input">
<p:inputText value="#{obj.myString}"/>
</f:facet>
</p:cellEditor>
<f:facet name="footer">
<h:inputText value="#{bean.myNewObject.myString}" />
</f:facet>
</p:column>
<p:column headerText="My List Value">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{bean.myListValue ? 'yes' : 'no'}" />
</f:facet>
<f:facet name="input">
<h:selectOneMenu value="#{bean.myListValue}" >
<f:selectItem itemValue="true" itemLabel="yes" />
<f:selectItem itemValue="false" itemLabel="no" />
</h:selectOneMenu>
</f:facet>
</p:cellEditor>
<f:facet name="footer">
<h:selectOneMenu value="#{bean.myNewObject.myListValue}" >
<f:selectItem itemValue="true" itemLabel="yes" />
<f:selectItem itemValue="false" itemLabel="no" />
</h:selectOneMenu>
</f:facet>
</p:column>
<p:column>
<p:rowEditor />
<f:facet name="footer">
<h:commandButton actionListener="#{bean.addRow}">
<f:ajax execute="myDatatable" render="myDatatable" />
</h:commandButton>
</f:facet>
</p:column>
</p:dataTable>
...
</h:form>
在我的bean中,我只使用了addRow方法:
public void addRow() {
this.myObjects.add(this.myNewObject);
this.myNewObject = new MyObject();
}
和init:
@PostConstruct
public void init() {
this.myObjects = Controller.getAllMyObjects();
this.myNewObject = new MyObject();
}
我可以确定bean在ViewScope中。结果是添加了行,字符串值是正确的但是列表值总是&#34; no&#34;即使我在实例化对象后在bean中使用this.myNewObject.setMyListValue(true)将其设置为true。
我知道这是渲染或执行属性的东西。 如果我改变了行:
<f:ajax execute="myDatatable" render="myDatatable" />
为:
<p:ajax update="@form" />
列表值为true但未设置字符串值。
如何确保我的两个属性都已呈现,如何在不提交整个表单的情况下获取值?
由于