ognl.InappropriateExpressionException: Inappropriate OGNL expression

本文解析了 Struts2 框架中因不当的 OGNL 表达式导致的 InappropriateExpressionException 错误,并提供了解决方案。特别指出当表单提交包含纯数字名称的参数时,会导致此异常。
部署运行你感兴趣的模型镜像

 

ognl.InappropriateExpressionException: Inappropriate OGNL expression: 1
2010年10月13日 星期三 14:26

网上查到的信息如下。

注意这里:
Inappropriate OGNL expression: 1,


你的问题:
这个 “1”,说明你的表单提交中有一个<input name="1" > 这样的提交项,
而struts2的机制是会自动去寻找name为1的action中的变量,但显然java中
不可能存在仅仅由数字组成的变量名1 ,所以就跑出错误了...


解决办法:
把你name为数字1的表单项改成非纯数字名称。

我的问题,是在使用ajax向后台发送异步请求的时候,参数串里传了一个"?1=1",结果就报错了。

做相应的改动就好啦!

 

参考网址:http://hi.baidu.com/winters1224/blog/item/bb31a61dcef6ac4a43a9adce.html

 

您可能感兴趣的与本文相关的镜像

Kotaemon

Kotaemon

AI应用

Kotaemon 是由Cinnamon 开发的开源项目,是一个RAG UI页面,主要面向DocQA的终端用户和构建自己RAG pipeline

在 MyBatis 中,`BuilderException` 和 `OGNLException` 是与 SQL 构建和表达式解析相关的重要异常类型。当 OGNL 表达式在解析过程中出现 `NullPointerException` 时,通常表明在表达式中引用了未初始化的对象或属性。这种情况可能导致 SQL 构建失败,进而引发 `BuilderException` 包裹 `OGNLException` 的嵌套异常。 ### 异常分析 1. **OGNL 表达式解析异常** OGNL(Object-Graph Navigation Language)是 MyBatis 用于解析动态 SQL 表达式的语言。在某些情况下,例如在 `<if>` 或 `<choose>` 等动态 SQL 标签中使用了未初始化的对象属性,可能导致 `NullPointerException`[^1]。 示例代码: ```xml <select id="selectUser" parameterType="map" resultType="User"> SELECT * FROM users <where> <if test="user.name != null"> AND name = #{user.name} </if> </where> </select> ``` 如果 `user` 对象为 `null`,则 `user.name` 会导致 `NullPointerException`[^1]。 2. **嵌套异常结构** MyBatis 将 OGNL 解析异常封装为 `BuilderException`,形成嵌套异常结构。这种结构通常表现为 `BuilderException` 包含 `OGNLException`,而 `OGNLException` 又包含 `NullPointerException`[^1]。 示例异常堆栈: ``` org.apache.ibatis.builder.BuilderException: Error evaluating expression 'user.name != null'. Cause: ognl.OgnlException: NullPointerException [null] at org.apache.ibatis.scripting.xmltags.OgnlCache.getValue(OgnlCache.java:45) at org.apache.ibatis.scripting.xmltags.ExpressionEvaluator.evaluateBoolean(ExpressionEvaluator.java:32) ... Caused by: ognl.OgnlException: NullPointerException [null] at ognl.Ognl.getValue(Ognl.java:544) ... Caused by: java.lang.NullPointerException ... ``` ### 解决方案 1. **避免空对象引用** 在 OGNL 表达式中,确保所有引用的对象和属性都已正确初始化。可以通过在表达式中添加空值检查来避免 `NullPointerException`[^1]。 示例代码: ```xml <if test="user != null and user.name != null"> AND name = #{user.name} </if> ``` 2. **使用安全导航操作符** OGNL 提供了安全导航操作符 `?.`,可以避免空对象引用导致的异常。使用 `?.` 可以在访问对象属性时自动检查对象是否为 `null`[^1]。 示例代码: ```xml <if test="user?.name != null"> AND name = #{user.name} </if> ``` 3. **调试与日志** 在开发和测试阶段,启用 MyBatis 的调试日志可以帮助快速定位问题。通过日志可以查看具体的 SQL 构建过程和异常信息[^1]。 示例日志配置(log4j.properties): ``` log4j.logger.org.apache.ibatis=DEBUG log4j.logger.org.apache.ibatis.scripting=DEBUG ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值