p:datatable:如何在p:对话框中编辑数据?

时间:2016-08-17 07:33:14

标签: primefaces datatable

上下文

我有一个带有按钮的数据表,可在单击时打开对话框。该对话框在p:inputTextarea

中显示其他数据(xml内容)

问题

现在我想使这个p:inputTextarea可编辑,并将更改反映在数据表的对象中。我想在对话框中添加一个命令按钮来保存更改。如何获取对所选对象的引用?

XHTML

<h:form id="alltxform">
    <p:dataTable id="tablealltx" var="transaction" value="#{transactionListModel.txList}">    
        <p:column>
            <p:commandButton update=":alltxform:xmlDetail" oncomplete="PF('dialog').show()">  
                    <f:setPropertyActionListener value="#{transaction}"
                        target="#{transactionListModel.selectedTx}" />  
            </p:commandButton>
        </p:column>
    </p:dataTable>

    <p:dialog header="Detail" widgetVar="dialog">
        <p:outputPanel id="xmlDetail">
            <p:inputTextarea readonly="false" id="xmlviewer"
                    value="#{transactionListModel.selectedTx.xml}" />
        </p:outputPanel>
    </p:dialog> 
</h:form>

模型

package model;

@Named
@SessionScoped
public class TransactionListModel implements Serializable {
    private static final long serialVersionUID = 1L;

    private List<TransactionVO> txList;
    private TransactionVO selectedTx;

    public TransactionVO getSelectedTx() {
        return selectedTx;
    }

    public void setSelectedTx(TransactionVO selectedTx) {
        this.selectedTx = selectedTx;
    }

    @PostConstruct
    public void init() {
        txList = new ArrayList<TransactionVO>();
    }

    public List<TransactionVO> getTxList() {
        return txList;
    }

    public void clearList(){
        txList = new ArrayList<TransactionVO>();
    }
}

按钮

我想将此按钮添加到对话框中。

<p:commandButton value="OK" onclick="PF('dialog').hide();" actionListener=""/>

我读过有关cellEdit事件的内容,但这并不是我所需要的。我需要在对话框中引用我的事务对象以保存更改。

1 个答案:

答案 0 :(得分:0)

你的意思是对话框看起来像 -

<p:dialog header="Detail" widgetVar="dialog">
    <p:outputPanel id="xmlDetail">
        <p:inputTextarea readonly="false" id="xmlviewer"
                value="#{transactionListModel.selectedTx.xml}" />
        <p:commandButton value="OK" onclick="PF('dialog').hide();" actionListener=""/>
    </p:outputPanel>
</p:dialog> 

在刷新表之前,操作会刷新模型吗?

您想要访问TransactionListModel.selectedTx?

如果它在模型中并且可以从控制器访问,那么只需 -

actionListener="#{yourController.yourAction(transactionListModel.selectedTx)}"

在更新之前更新yourAction方法中的基础数据结构:tablealltx:tablealltx