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

Primefaces p:datatable:如何在p:对话框中编辑数据?,primefaces,datatable,Primefaces,Datatable,上下文 我有一个datatable,它有一个按钮,单击时会打开一个对话框。该对话框在p:inputExtArea中显示其他数据(xml内容) 问题 现在我想让这个p:inputExtArea可编辑,并将更改反映在datatable的对象中。我想在对话框中添加一个commandbutton来保存更改。如何获取对选定对象的引用 Xhtml <h:form id="alltxform"> <p:dataTable id="tablealltx" var="transactio

上下文

我有一个datatable,它有一个按钮,单击时会打开一个对话框。该对话框在p:inputExtArea中显示其他数据(xml内容)

问题

现在我想让这个p:inputExtArea可编辑,并将更改反映在datatable的对象中。我想在对话框中添加一个commandbutton来保存更改。如何获取对选定对象的引用

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>();
    }
}

型号

<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>();
    }
}
包模型;
@命名
@会议范围
公共类TransactionListModel实现可序列化{
私有静态最终长serialVersionUID=1L;
私人名单;
私人交易VO selectedTx;
公共事务VO getSelectedTx(){
返回selectedTx;
}
公共无效设置selectedTx(事务VO selectedTx){
this.selectedTx=selectedTx;
}
@施工后
公共void init(){
txList=新的ArrayList();
}
公共列表getTxList(){
返回txList;
}
公共无效清除列表(){
txList=新的ArrayList();
}
}
按钮

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

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


我读过cellEdit事件,但这不是我真正需要的。为了保存更改,我需要在对话框中引用我的事务对象。

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

<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> 

在更新:tablealltx:tablealltx

之前,在yourAction方法中更新基础数据结构。您的意思是对话框看起来像-

<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> 

当然,在更新:tablealltx:tablealltx之前,在yourAction方法中更新基础数据结构。有时它就在我面前,而我却看不到它。由于某种原因,transactionListModel.selectedTx未设置并保持为空。我如何设置它?f:setPropertyActionListener在这里似乎不起作用,使用第一个按钮而不是使用bean的setter来填充setPropertyActionListener?我认为人们不应该直接打电话给他们,当然,我不认为从数据表中填充数据有那么糟糕。有时它就在我面前,而我却看不到它。由于某种原因,transactionListModel.selectedTx未设置并保持为空。我如何设置它?f:setPropertyActionListener在这里似乎不起作用,使用第一个按钮而不是使用bean的setter来填充setPropertyActionListener?我认为不应该直接调用。我不认为从数据表填充数据有那么糟糕