形如Exception thrown by getter for property XXX of bean XXX 或 No getter method for property XXX of bean XX

本文解决了使用Struts框架中的logic:iterate标签时出现的异常问题,包括属性名称不匹配和延迟加载错误,并提供了正确的配置方法。

 调试了一早上,就是老出这两个错,总算把问题找出来了,这里总结一下:

教材上都是这样来讲解struts标签 logic:iterate

<logic:iterate id="emp" name="employee"> 
    <bean:write name="emp" property="name"/>
</logic:iterate>

但是应用中我们却多会用到这样的 logic:iterate 格式:有外键

<logic:iterate id="emp" name="employees">
<bean:write name="emp" property="role.name"/>
</logic:iterate>

然后你发现如题的报错:

Exception thrown by getter for property XXX of bean XXX

No getter method for property XXX of bean XX

在我的browser里jsp显示了一半(tiles layout)

问题无非是这样的:

first:属性不一致   @author assosson 200811121118

<bean:write name="emp" property="role.namr"/>中 property与po中的属性不一致

如把name打成了namr
second:在自动生成的hibernate映射文件*.hbm.xml中,把有<many-to-one>的属性加一个lazy="false"

切记,所有用到外键的,都要这样处理,要不然延迟加载就会报错,就算你到时怎么检查getter方法,也找不出来原因

保险起见,我这样加: fetch="join" lazy="false" not-null="true"

### 关于 "Exception thrown by target of invocation" 的原因和解决方案 在 .NET 环境中,`System.Reflection.TargetInvocationException` 是一种常见的异常类型,通常发生在通过反射调用方法时。该异常表示在目标方法执行过程中抛出了其他异常[^1]。以下是关于此异常的详细分析及解决方案: #### 1. 异常的根本原因 `TargetInvocationException` 是一个包装异常,它通常是由于被调用的方法内部发生了错误而引发的。具体来说,当使用 `System.Reflection.MethodInfo.Invoke` 类似机制调用方法时,如果目标方法本身抛出异常,则会捕获并包装为 `TargetInvocationException` 抛出[^2]。 此外,环境配置问题也可能导致此类异常。例如,在某些情况下,过长的系统环境变量(如 `PATH`)可能导致应用程序运行时出现问题,进而引发异常[^3]。 #### 2. 解决方案 以下是解决 `TargetInvocationException` 的几种常见方法: - **检查目标方法的具体异常** 需要深入分析 `TargetInvocationException` 的 `InnerException` 属性,以确定实际发生的错误。以下是一个示例代码,用于捕获并输出内部异常: ```csharp try { // 调用目标方法 var result = methodInfo.Invoke(instance, parameters); } catch (System.Reflection.TargetInvocationException ex) { Console.WriteLine("Inner Exception: " + ex.InnerException.Message); } ``` - **缩短环境变量长度** 如果问题与系统环境变量相关,建议检查并缩短 `PATH` 变量的长度,确保其不超过 2048 字符[^3]。可以通过以下步骤进行调整: 1. 打开系统属性对话框。 2. 转到“高级”选项卡,点击“环境变量”。 3. 编辑 `PATH` 变量,移除不必要的路径。 - **验证远程服务调用** 如果异常发生在通过代理(stub)调用远程服务的过程中[^2],需要确保以下几点: - 远程服务是否正常运行。 - 服务接口定义是否与客户端匹配。 - 网络连接是否稳定。 #### 3. 示例代码:调试反射调用 以下是一个完整的示例,展示如何调试反射调用中的异常: ```csharp using System; using System.Reflection; class Program { static void Main() { try { Type type = typeof(MyClass); MethodInfo method = type.GetMethod("MyMethod"); object instance = Activator.CreateInstance(type); object[] parameters = { 5 }; method.Invoke(instance, parameters); } catch (TargetInvocationException ex) { Console.WriteLine("TargetInvocationException caught."); if (ex.InnerException != null) { Console.WriteLine("Inner Exception: " + ex.InnerException.Message); } } } } class MyClass { public void MyMethod(int value) { if (value < 10) { throw new InvalidOperationException("Value must be greater than or equal to 10."); } Console.WriteLine("Value is valid: " + value); } } ``` #### 4. 总结 `TargetInvocationException` 的根本原因是目标方法执行过程中抛出了其他异常。解决问题的关键在于: - 捕获并分析 `InnerException`。 - 检查环境配置(如 `PATH` 变量长度)。 - 确保远程服务调用的正确性。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值