Exception thrown by getter for property

本文详细阐述了在使用Spring框架时,遇到Exceptionthrownbygetterforproperty**ofbean***异常的原因及解决方案。通过排查数据库,发现特定页面关联的数据缺失是问题根源。提出了解决方案:配置hibernate文件以优化数据库交互,并在web.xml中配置openSesseionInViewFilter过滤器以解决延迟加载数据引发的问题。问题最终得到解决。

今天遇到一个

Exception thrown by getter for property ** of bean ***

 

的问题,查了半天还是找不到问题,其实应该从提示信息着手,因为其他同样的页面没有问题,单单一个页面出现问题,后来查数据库发现该页面关联的某页面在数据库中的某一个表中没有数据。。汗了一地。。。

 

其他相关的解决方法:

1,

配置hibernate文件 

http://hi.baidu.com/200770842223/item/830e16dcb8b8fe57d73aae11

 

2,

解决方法:

可以在web.xml中配置一个openSesseionInViewFilter过滤器

配置如下:

    <!-- 配置一个OpenSessionInViewFilter的过滤器,用于当用户请求带有延迟加载的数据时,解决lazyInitialization的问题 -->
    <filter>
        <filter-name>openSessionInViewFilter</filter-name>
        <!-- 在referenced Libraries文件夹下的: spring-orm.jar-->

        <filter-class>
            org.springframework.orm.jdo.support.OpenPersistenceManagerInViewFilter
        </filter-class>
    </filter>

    <filter-mapping>
    <filter-name>openSessionInViewFilter</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>

问题解决了!

 

参见  http://xiaoxuejie.iteye.com/blog/791872

 

<think> 我们正在讨论的是使用Qt的QAxObject通过COM自动化操作Microsoft Word时遇到的错误。用户之前询问了关于`Selection`对象的兼容性问题,现在遇到了一个具体的错误信息:'Error calling IDispatch member TypeParagraph: Exception thrown by server'。 这个错误发生在调用`TypeParagraph`方法时。让我们分析这个错误: 1. **错误信息分解**: - `IDispatch`:这是COM自动化中使用的接口,用于后期绑定(在运行时按名称调用方法)。 - `TypeParagraph`:这是Word VBA中`Selection`对象的一个方法,用于插入一个段落标记(相当于按Enter键)。 - `Exception thrown by server`:表示Word应用程序(作为COM服务器)在执行此方法时抛出了异常。 2. **可能的原因**: - **文档保护状态**:如果文档处于保护状态(如表单保护),则不允许随意插入段落标记。 - **选区位置无效**:当前选区可能位于不允许插入段落的位置(如表格的最后一个单元格之后,或者文档末尾的特殊位置)。 - **Word应用程序状态异常**:Word可能处于繁忙状态或出现内部错误。 - **参数传递问题**:虽然`TypeParagraph`方法通常没有参数,但有时Qt的QAxObject在调用方法时可能会因为参数传递方式不当而引发问题。 3. **排查步骤**: - **检查文档保护**:通过COM检查文档是否处于保护状态。 ```cpp QAxObject* activeDocument = myword->querySubObject("ActiveDocument"); QAxObject* protection = activeDocument->querySubObject("Protection"); int protectionType = protection->property("Type").toInt(); if (protectionType != wdNoProtection) { // 文档受保护,需要解除保护或处理保护状态 } ``` 其中`wdNoProtection`的值是0(需要定义常量或使用数字)。 - **检查选区类型**:确定当前选区是否允许插入段落。 ```cpp QAxObject* selection = myword->querySubObject("Selection"); int selectionType = selection->property("Type").toInt(); // 如果选区类型是wdSelectionIP(即插入点,值为1),则通常可以插入段落。 // 如果选区类型是wdSelectionColumn(即表格列,值为4),则可能无法插入段落。 ``` - **错误处理**:在调用方法前后捕获具体的Word错误信息。 ```cpp QAxObject* application = myword->querySubObject("Application"); application->dynamicCall("ClearCustomError()"); // 清除之前的错误 selection->dynamicCall("TypeParagraph()"); // 尝试调用 // 检查错误 int errorCode = application->property("LastErrorCode").toInt(); if (errorCode != 0) { QString errorMsg = application->property("LastErrorMessage").toString(); qDebug() << "Word错误: " << errorCode << errorMsg; } ``` - **使用SafeCall封装**:使用Qt的异常捕获机制。 ```cpp try { selection->dynamicCall("TypeParagraph()"); } catch (...) { qDebug() << "调用TypeParagraph失败"; } ``` 4. **替代方案**: - 使用`TypeText`方法输入换行符: ```cpp selection->dynamicCall("TypeText(QString)", "\r"); ``` 注意:在Word中,一个回车符`\r`表示一个段落标记。 - 使用`InsertParagraphAfter`方法(更安全): ```cpp selection->dynamicCall("InsertParagraphAfter()"); ``` 5. **Word版本差异**(用户之前关注2020兼容性): - `TypeParagraph`方法在所有现代Word版本中行为一致,但文档保护或选区限制的条件可能因版本而异。Word 2020对文档保护的增强可能导致某些操作更易触发异常。 6. **最佳实践建议**: - 在调用方法前检查文档状态。 - 优先使用更稳定的`InsertParagraphAfter`方法。 - 使用try-catch或检查错误代码进行异常处理。 7. **错误信息的深层含义**: - 此错误表明Word COM对象在执行操作时遇到了无法处理的内部状态,可能是由于违反业务逻辑(如文档保护)或边界条件(如无效选区)导致。它属于COM服务器(Word)主动抛出的异常,而非Qt层的问题[^1]。 8. **相关问题**: - 如何通过COM检测Word文档的保护状态? - 在Word表格中如何安全插入新段落? - 如何处理Word COM调用时的异常? - 如何获取Word服务器返回的详细错误描述? - 有哪些替代方法可以在Word中插入段落标记? 请根据实际调试情况选择上述排查策略。若问题持续,可尝试简化操作步骤(如新建空白文档测试)以确定是否为环境问题[^2]。 </think> ### 错误信息分析:`Error calling IDispatch member TypeParagraph: Exception thrown by server` 该错误发生在通过 COM 自动化接口操作 Microsoft Word 时,具体涉及 `Selection` 对象的 `TypeParagraph` 方法调用。以下是关键解析: #### 一、错误本质 1. **`IDispatch` 接口问题** 表示 Qt 的 `QAxObject` 无法正确调用 Word COM 对象的底层方法: $$ \text{COM 接口} \xrightarrow{\text{调用失败}} \text{Word.Application (IDispatch)} $$ 2. **`TypeParagraph` 方法失败** 此方法用于插入段落标记(相当于按 Enter 键),失败意味着 Word 无法执行此操作。 3. **服务器异常** `Exception thrown by server` 表明 Word 作为 COM 服务器主动中断了操作。 #### 二、根本原因 1. **文档状态冲突** - 文档处于**保护模式**(如审阅模式或窗体保护) - 光标位于**不可编辑区域**(表格单元格外/页眉页脚) - 示例检测代码: ```cpp QAxObject* doc = myword->querySubObject("ActiveDocument"); bool isProtected = doc->property("ProtectionType").toInt() > 0; // >0 表示受保护 ``` 2. **COM 版本不匹配** - 使用 32 位 Qt 操作 64 位 Word
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值