UDN-企业互联网技术人气社区

板块导航

浏览  : 2196
回复  : 8

[技术架构] 主子孙单据 在新增的时候 子表增加第二行数据报错

[复制链接]
龍蛇鳯躌的头像 楼主
发表于 2014-11-7 09:40:41 | 显示全部楼层 |阅读模式
本帖最后由 龍蛇鳯躌 于 2014-11-7 09:43 编辑

09:19:16 [AWT-EventQueue-0] ERROR - 未知错误
java.lang.NullPointerException
        at nc.ui.pubapp.uif2app.components.grand.util.MainGrandAssist.putDataIntoAddMap(MainGrandAssist.java:549)
        at nc.ui.pubapp.uif2app.components.grand.util.MainGrandAssist.getGrandCardDataByMainRowAdd(MainGrandAssist.java:209)
        at nc.ui.pubapp.uif2app.components.grand.util.CardPanelEventUtil.rowChangeStateIsAdd(CardPanelEventUtil.java:128)
        at nc.ui.pubapp.uif2app.components.grand.CardGrandPanelComposite.onRowChangeHandler(CardGrandPanelComposite.java:606)
        at nc.ui.pubapp.uif2app.components.grand.CardGrandPanelComposite.handleEvent(CardGrandPanelComposite.java:359)
        at nc.ui.pubapp.uif2app.model.AppModelExDelegate.fireToListener(AppModelExDelegate.java:333)
        at nc.ui.pubapp.uif2app.model.AppModelExDelegate.directFireEvent(AppModelExDelegate.java:196)
        at nc.ui.pubapp.uif2app.model.AppModelExDelegate.fireEvent(AppModelExDelegate.java:126)
        at nc.ui.pubapp.uif2app.model.BillManageModel.fireEvent(BillManageModel.java:75)
        at nc.ui.pubapp.uif2app.event.card.CardPanelEventTransformer$CardListener.bodyRowChange(CardPanelEventTransformer.java:343)
        at nc.ui.pub.bill.BillScrollPane$RowSelectListener.valueChanged(BillScrollPane.java:452)
        at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:167)
        at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:147)
        at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:194)
        at javax.swing.DefaultListSelectionModel.changeSelection(DefaultListSelectionModel.java:388)
        at javax.swing.DefaultListSelectionModel.changeSelection(DefaultListSelectionModel.java:398)
        at javax.swing.DefaultListSelectionModel.setSelectionInterval(DefaultListSelectionModel.java:442)
        at javax.swing.JTable.changeSelectionModel(JTable.java:2351)
        at javax.swing.JTable.changeSelection(JTable.java:2420)
        at nc.ui.pub.bill.BillScrollPane$BillTable.changeSelection(BillScrollPane.java:877)
        at nc.ui.pub.bill.BillScrollPane.addLine(BillScrollPane.java:1572)
        at nc.ui.pub.bill.BillScrollPane.addLine(BillScrollPane.java:1535)
        at nc.ui.pub.bill.BillScrollPane.addLine(BillScrollPane.java:1521)
        at nc.ui.pubapp.uif2app.actions.BodyAddLineAction.doAction(BodyAddLineAction.java:47)
        at nc.ui.pubapp.uif2app.actions.AbstractBodyTableExtendAction.doAction(AbstractBodyTableExtendAction.java:53)
        at nc.ui.uif2.NCAction.actionPerformed(NCAction.java:85)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
        at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:272)
        at java.awt.Component.processMouseEvent(Component.java:6216)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
        at java.awt.Component.processEvent(Component.java:5981)
        at java.awt.Container.processEvent(Container.java:2041)
        at java.awt.Component.dispatchEventImpl(Component.java:4583)
        at java.awt.Container.dispatchEventImpl(Container.java:2099)
        at java.awt.Component.dispatchEvent(Component.java:4413)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4556)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4220)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4150)
        at java.awt.Container.dispatchEventImpl(Container.java:2085)
        at java.awt.Component.dispatchEvent(Component.java:4413)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)










跟踪后台代码看了下   是新增第二行子表数据时  后台吧孙表的数据放子表中 报了空指针,


            if (!ArrayUtils.isEmpty(tabCodes)) {
                for (String grandTabCode : tabCodes) {
                    lastcardUniqueKey = bodyTabCode + last_pk_body + grandTabCode;
                    CircularlyAccessibleValueObject[] lastGrandVos =
                            MainGrandUtil.getBodyVOsByTabCode(grandbillform, grandTabCode);
                    if(lastGrandVos == null || lastGrandVos.length == 0){
                            getMainGrandModel().getBufferCardAddMap().remove(lastcardUniqueKey);
                            continue;
                    }
549                 ArrayList<Object> lastGrandVosList = new ArrayList<Object>();
                    for (CircularlyAccessibleValueObject grandVo : lastGrandVos) {
                        lastGrandVosList.add(grandVo);
                    }
                    this.getMainGrandModel().getBufferCardAddMap().put(lastcardUniqueKey, lastGrandVosList);
                }



孙表的tabCodes 只有1个 但是循环执行了两次  第二次得不到grandTabCode 于是报了空指针 。不知道为什么会出现这种情况






配置文件


        <!-- 子孙之间对应模板关系配置 -->
        <bean id="mainGrandRelationShip" class="nc.ui.pubapp.uif2app.components.grand.MainGrandRelationShip">
                <!-- 列表的对应关系 -->
                <property name="bodyTabTOGrandListComposite">
                        <map>
                                <!-- key为子表的tabcode -->
                                <entry key="pk_postccstand_b">
                                        <!-- 孙表的BillListView -->
                                        <ref bean="sunlistView1"></ref>
                                </entry>
                        </map>
                </property>
                <!-- 卡片的对应关系 -->
                <property name="bodyTabTOGrandCardComposite">
                        <map>
                                <!-- key为子表的tabcode -->
                                <entry key="pk_postccstand_b">
                                        <!--孙表的BillListView-->
                                        <ref bean="sunbillFormEditor1"></ref>
                                </entry>
                        </map>
                </property>
                <!-- 孙页签与VO的对应关系 -->
                <property name="grandTabAndVOMap">
                        <map>
                                <!-- key为孙页签的tabcode -->
                                <entry key="pk_postccstand_c">
                                        <!-- value为孙页签对应的VO -->
                                        <ref bean="PostccstandCVO"></ref>
                                </entry>
                        </map>
                </property>
        </bean>
        <bean id="PostccstandCVO" class="nc.vo.hse.hse_postccstand.PostccstandCVO"></bean>



求大神告知如何解决。。。


新增第二行子表数据报错

新增第二行子表数据报错
发表于 2014-11-7 14:02:18 | 显示全部楼层
@机器人儿 @张国强 @云想月 麻烦帮看看啦
使用道具 举报

回复

龍蛇鳯躌的头像 楼主
发表于 2014-11-10 09:56:22 | 显示全部楼层
在把源码复制出来 然后重新运行 发现真正报错的是因为没有配置空行过滤
使用道具 举报

回复

龍蛇鳯躌的头像 楼主
发表于 2014-11-10 14:33:23 | 显示全部楼层
然后 保存时报错

// 解析聚合VO类型
        NCObject aggVoNcObject = NCObject.newInstance(object);
        IBean aggNcObjectLation = aggVoNcObject.getRelatedBean();
        List<IAttribute> aggVoAttrList = MainGrandBusiUtil.getInstance().queryChildAttr(aggNcObjectLation);
        for (IAttribute childattr : aggVoAttrList) {
            CircularlyAccessibleValueObject[] childrenVOs = this.getAllChildVos((AbstractBill) object);
            if (childrenVOs == null || childrenVOs.length == 0) {
                continue;
            }
            for (CircularlyAccessibleValueObject childVo : childrenVOs) {
                NCObject ncObject = NCObject.newInstance(childVo);
                IBean bean = ncObject.getRelatedBean();
                // 获取子表中对应孙实体的属性列表
                List<IAttribute> attrList = MainGrandBusiUtil.getInstance().queryChildAttr(bean);
              
               
                String uniqueCardKey = "";
                for (IAttribute grandattr : attrList) {
                    // 组装唯一标识key 子页签tabcode+子主键+孙页签tabcode
                    try {
                        uniqueCardKey = childattr.getName() + childVo.getPrimaryKey() + grandattr.getName();

在解析vo的时候  主子 是聚合  但是子孙不是聚合 孙是子表的一个数组属性  但是
                // 获取子表中对应孙实体的属性列表
                List<IAttribute> attrList = MainGrandBusiUtil.getInstance().queryChildAttr(bean);
得到孙属性的时候 是一个 适用于聚合VO子表字段的访问器 BodyOfAggVOAccessor  然后就报错了

求解释为什么?
使用道具 举报

回复

龍蛇鳯躌的头像 楼主
发表于 2014-11-10 15:19:58 | 显示全部楼层
发现是元数据 子表中孙表的访问策略没有配对。。。最终问题还是回到了xml的空行过滤。。xml配置的空行过滤就打不开界面 但是不配置 后面的代码全都会去调用这个 然后报空指针。。。
使用道具 举报

回复

发表于 2014-11-13 09:17:52 | 显示全部楼层
龍蛇鳯躌 发表于 2014-11-10 15:19
发现是元数据 子表中孙表的访问策略没有配对。。。最终问题还是回到了xml的空行过滤。。xml配置的空行过滤 ...

麻烦帮帮忙呀大神@云想月 @张国强 @机器人儿 @jianchun0123
使用道具 举报

回复

发表于 2014-11-13 11:28:56 | 显示全部楼层
黑丫头 发表于 2014-11-13 09:17
麻烦帮帮忙呀大神@云想月 @张国强 @机器人儿 @jianchun0123

老大,这个我就不清楚了。在使用上面的东西,可能我是清楚的。:lol
使用道具 举报

回复

发表于 2014-11-28 12:36:13 | 显示全部楼层
我怎么配置不出来啊,我孙表出不来,请教下啊
使用道具 举报

回复

发表于 2014-11-28 13:39:57 | 显示全部楼层
我也是这个错误,奇怪了
使用道具 举报

回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们
联系我们
  • 电话:010-86393388
  • 邮件:udn@yonyou.com
  • 地址:北京市海淀区北清路68号
移动客户端下载
关注我们
  • 微信公众号:yonyouudn
  • 扫描右侧二维码关注我们
  • 专注企业互联网的技术社区
版权所有:用友网络科技股份有限公司82041 京ICP备05007539号-11 京公网网备安1101080209224 Powered by Discuz!
快速回复 返回列表 返回顶部