注册 登录
编程论坛 J2EE论坛

跳页,出BeanUtil.populate错误-->千里冰封转移

柳儿 发布于 2007-09-03 15:10, 1641 次点击
出错的程序是用structs开发的。
现在一个页面里包含多个select标签以及隐藏的标签。还有FormFile对象,用于上传文件。
从别的页面进入,都一切正常,但是从这个页面跳转到某个页面(目前发现的唯一一个出这个错误的页面),就会出错,报的错误是:BeanUtil.populate。

跟了一下代码,走了调用下一个页面的javascript方法,但是action没有走到就出错了。

更奇怪的是,跳转到其他页面都没有问题。

哪位大侠知道这个错误是什么引起的?如何解决阿?哪怕是可能出错的地方也行啊。

ps:FormFile对象是分开定义的,不是数组,是单个的对象。
15 回复
#2
柳儿2007-09-04 13:45
没人知道啊
#3
Gramary2007-09-04 13:49

这应该是数据类型不一致的错误`
还没走Action 但是已经走了ActionForm了
所以在将表单的值传给ActionForm的时候,应该有特殊的数据类型 例如Date或者别的对象
你去看一下日志文件`
那里会有完整的错误输出......如果是Tomcat就在安装目录下的logs文件夹下面`
你看今天的日志``

#4
柳儿2007-09-05 09:31
看了,log里打的就是BeanUtil.populate。

然后把这个画面的所有select的隐藏变量去掉,就不会出错了。(但是其他业务处理需要这些隐藏变量的,还不能去)

要说是类型不一致。跳页调用的是另外一个画面的initialAction。原画面的数据不会赋值给跳转后的页面啊。
没有数据的赋值一说,还会发生类型不一致么?
#5
Gramary2007-09-05 10:28

你在Struts中 如果那个<html:form >的 action="" 要是不写`
你看是不是会出现错误```
你调用initialAction是不是 用.do的路径来调用啊` 那么这个Action在配置文件的时候`
是不是要指定ActionForm
在你这个页面中是不是用<html:form action=".do"> 来调用initialAction
那么程序执行的时候,这个form表单会自动去找与initialAction匹配的ActionForm
然后把form表单的值传给ActionForm里面的变量
所以一有请求,程序就给ActionForm里面的变量赋值

#6
柳儿2007-09-05 13:00
在我的页面里,比如A.jsp,通过点击一个按钮,触发onclick事件,调用的B页面的initialAction.do。
那请问版主,你说的那个类型不匹配,是A的ActionForm还是B的ActionForm呢?
#7
Gramary2007-09-05 13:38
initialAction.do 这个路径对应的Action 关联的ActionForm
#8
柳儿2007-09-05 15:29

那就是B页面的actionForm出现类型不匹配了吧?

但是不从A页面,从其他任何页面调用B页面的intialAction.do,都正常。

#9
Gramary2007-09-05 16:11

???
哪个页面的.do不对吧``
在A页面调用.do路径
应该是 <html:form action=".do"> 然后提交就访问这个.do的对应的Action的方法

为什么是B页面的.do呢`
我不太清楚了` 要是你是从A页面调用B页面 大可以用 b.jsp就可以了
为什么会是.do的形式呢
#10
柳儿2007-09-05 16:44
斑竹啊,不是在form的action里调用。
调用.do,不是和.jsp一样么?
在structs配置文件里已经写了action成功的话走哪个jsp,不成功的话走哪个jsp的。
B的intialAction成功后走的就是B的jsp页面啊。

#11
Gramary2007-09-05 17:05

完全被你搞晕了``
可能是我理解有问题
你能不能把你的流程写清楚点
是哪个过程出现问题了

#12
柳儿2007-09-05 17:12
A页面 -〉点击 按钮 -〉调用B页面的initialAction.do ,然后就出错了,页面链接显示B页面的action.do
但是B页面的initialAction.java打了断点也没有走。

log里报beanUtil.populate的错。

ps:从A页面进入其他页面都正确,从其他页面进入B页面也正确,唯独,从A页面进入B页面不正确。
#13
Gramary2007-09-05 19:06
就是这里我没搞清楚
为什么是调用B页面的initialAction.do
A页面的按钮 触发的路径应该直接是initialAction.do才对
为什么会是B页面的initialAction.do
我用Struts这么久也没试过这样调用的
#14
柳儿2007-09-05 19:58
殊途同归。

我终于搞定了,查到了B页面的ActionForm里,挨个屏蔽,目标锁定在一个类型为String的对象上。
有了它,画面必倒,没有它,画面完好。
然后我到A页面的actionForm里搜索这个变量名,居然发现真有一个一模一样的变量,不过类型不同。

明天改了,看看是否是这个东西在捣鬼。

难道画面迁移的时候,不允许有同名不同类型的变量阿。B页面也不用从A页面来的值初始化阿。
真是企有此理。

下班啦。明天见。

谢谢版主

[此贴子已经被作者于2007-9-5 19:59:17编辑过]

#15
xhdwell2007-09-08 16:17
这是因为ACTIONFORM中的一定有java.sql.date型的数据,并且传入了NULL值。我以前也碰到这样的问题过的~~
http://www.cnblogs.com/bjzhanghao/archive/2004/08/17/34106.html
参照这个做就能解决问题了

[此贴子已经被作者于2007-9-8 16:20:13编辑过]

#16
柳儿2007-09-09 08:38
谢谢楼上。
java.sql.date型的数据我们都存为String类型,然后操作数据库的时候转换。项目里的牛人封装的DAO,用起来还不错。

那个问题也解决了。
有一个变量名在B页的actionForm里是String类型,在A页里的actionForm里是List类型。
就因为这个,已经改过了。
现在一切正常。

谢谢大家关注。/
1