ADF 表格删除获取不到当前行

本文介绍了解决ADF Table中删除按钮总是删除第一行的问题。通过自定义删除按钮和监听器,实现了点击任意行进行删除的功能,并详细展示了实现步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在将DataControl中的表格拖到页面上后,点击Delete按钮,总是删除第一行,也就是说获取不到当前行,为什么???

1. 首先,在拖拽生成ADF Table时,应设置成Single, 另外还有两个属性,selectedRowKeys="#{bindings.MbpTicket1.collectionModel.selectedRow}"
                      selectionListener="#{bindings.MbpTicket1.collectionModel.makeCurrent}"


2. 然后,如何还是不行的话,就可以不用自带的Operations下的Delete方法,而是自己添加删除数据库的方法,具体如下:

  • 在Table手动添加一列Delete按钮  
<af:column id="c20" headerText="Action">
           <af:commandButton text="Delete" id="cb7"
                      actionListener="#{pageFlowScope.loginBean.deleteTicketById}">
            <f:attribute value="#{row.TicketId}" name="TicketId" id="p1"/>

            </af:commandButton>

</af:column>

  • 并绑定到ManageBean中的相应方法(deleteTicketById
  • 在deleteTicketById中添加相应的方法

    public void deleteTicketById(ActionEvent actionEvent) {

        UIComponent component = actionEvent.getComponent();

        Map map = component.getAttributes();

        Object obj = map.get("TicketId");

        

        AppModuleAMImpl am =

            (AppModuleAMImpl)ADFUtils.getApplicationModuleForDataControl("AppModuleAMDataControl");

 

        // delete the ticket

        

        if (obj != null) {

            Long ticketId = Long.parseLong(obj.toString());

            System.out.println("====================" + ticketId);

            am.deleteTicketById(ticketId);

        }


    }

  • 在AM中添加ManageBean中调用的方法deleteTicketById

    public void deleteTicketById(Long id)
    {
        DBTransaction dbTransaction = this.getDBTransaction();
        String sql = "DELETE MBP_TICKET WHERE TICKET_ID = ? ";
        PreparedStatement ps = dbTransaction.createPreparedStatement(sql, 0);
        try {
            ps.setLong(1, id);
            ps.executeUpdate();
            
        } catch (SQLException e) {
            throw new JboException(e);
        } finally {
            if (ps != null) {
                try{
                    ps.close();
                }catch(Exception e){
                   System.out.println(e.getMessage());
                }
            }
        }
        
        dbTransaction.commit();
        this.getMbpTicket1().executeQuery();    
    }

  • 这样就也可以达到点击表格一行,将此行删除的目的了。

注:前面我们说到ADF一般不直接在AM中操作数据库,而应该在ManageBean中操作VO,具体如下:

  • 获得一个AM句柄

        AppModuleAMImpl am =
            (AppModuleAMImpl)ADFUtils.getApplicationModuleForDataControl("AppModuleAMDataControl");

  • 获得VO
MbpTicketVOImpl vo = am.getMbpTicket1();
  • 获取当前行的具体属性

Row row = vo.getCurrentRow()      

MbpTicketVORowImpl ticketRow = (MbpTicketVORowImpl)row;

int movieId = ticketRow.getMovieId().intValue();







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值