0

我有一个带有属性 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();
}

和初始化:

@PostConstruct
public void init() {
    this.myObjects = Controller.getAllMyObjects();
    this.myNewObject = new MyObject();
}

我可以确定 bean 在 ViewScope 中。结果是添加了行,字符串值是正确的,但列表值始终为“否”,即使我在实例化对象后使用 bean 中的 this.myNewObject.setMyListValue(true) 将其设置为 true。

我知道这是渲染或执行属性的东西。如果我换行:

<f:ajax execute="myDatatable" render="myDatatable" />

至:

<p:ajax update="@form" />

列表值为 true,但未设置字符串值。

如何确保我的两个属性都已呈现,以及如何在不提交整个表单的情况下获得值?

谢谢

4

0 回答 0