jsf从h:commandButton的actionListener获取selectOneMenu值

时间:2013-07-29 12:32:19

标签: ajax primefaces datatable row add

我有一个带有属性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但未设置字符串值。

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

由于

0 个答案:

没有答案