几个WEB开发的基础问题

joejoe1991 2008-03-14 09:09:59
1.ActionForm里访问DAO是否有违背MVC?
页面上有一个表单,<html:optionCollections>里绑定了一个从数据库里查出来的LIST
而查这个LIST的代码是写在Action里的。
不过现在有一个问题,如果表单提交的时候,没有通过ActionForm的验证,再次forward返回到这个页面的时候,这时LIST就是NULL
那就无法再次绑定数据了!我又不想把ActionForm存在Session里,就将查这个LIST的代码写在了ActionForm的构造里,请问这样是否有违背MVC?

2.hibernate映射的问题,一个列在数据库里有默认值,我在映射这个属性的时候,加了insert="false"
不过这时发现了一个问题,当我save这个对象以后,数据库里确实添加了记录,不过有默认值的那一列,并没有将数据库生成的默认值反映到这个对象里去
这时应该怎么办?不会是要再查一次吧?

3.hibernate,在用session.get和load的时候发现的问题。
用get方法查的时候,POJO的那个空构造可以是任何访问权限
可是用load不行,我改成private它报错?请问为什么

谢谢回答,只有这么多分了。
...全文
148 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
dracularking 2008-03-15
  • 打赏
  • 举报
回复
1.嗯 判断好了 查list部分写在Action里
2.同意连默认值一并save进去
3.private按常理就该报错 报的是什么错?
DiligencyMan 2008-03-15
  • 打赏
  • 举报
回复
1,的确违背了MVC设计原则。但是不是非得用两个action,你在action里面判断下,哪个是从显示页面过来的,哪个是从处理提交页面过来,就搞定啦!
2,你save对象的时候,应该把这个的对象的那个需要默认值的值设置好比如(bean.setAddress("shanghai")) 设死它,加insert="false"是不行的。
3, get时,空构造是任何对象都可以访问的,这是没有错误的。你改成private,除了本类的方法外,外部是访问不到的啊,load当然会报错啦!
joejoe1991 2008-03-15
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 dracularking 的回复:]
看看DispatchAction能不能完成你的业务需求 具体再探讨
[/Quote]
多谢提醒,我找找资料去。。
joejoe1991 2008-03-15
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 xl45591275 的回复:]
hibernate保留默认值需要设置下边的两个属性
dynamic-insert="true"和 dynamic-update= "true"
[/Quote]
没用的哦,还是拿不到。
dracularking 2008-03-15
  • 打赏
  • 举报
回复
看看DispatchAction能不能完成你的业务需求 具体再探讨
joejoe1991 2008-03-15
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 dracularking 的回复:]
验证不通过的时候能不能也让它跳转一个action 进行读取list的处理?
[/Quote]
这个,我就是为了减少Action的数量才把多个操作写在一个Action里,用action参数的值来判断应该进行什么操作的,
因为Action一多我容易乱。。。(虽然说多个操作写在一个Action里也很乱)
我感觉建一个Action就为了读一个List有点浪费吧。。
dracularking 2008-03-15
  • 打赏
  • 举报
回复
验证不通过的时候能不能也让它跳转一个action 进行读取list的处理?
radium0028 2008-03-15
  • 打赏
  • 举报
回复
hibernate保留默认值需要设置下边的两个属性
dynamic-insert="true"和 dynamic-update= "true"
joejoe1991 2008-03-15
  • 打赏
  • 举报
回复
1.只有一个页面的啊,
比如:product.do?action=displayForm,这时,ActionForm里检测这个action的值,发现是displayForm,所以不进行输入验证,
ActionForm里不会进行输入验证!然后进入ACTION,ACTION查出LIST,保存到ACTIONFORM里,
然后forward到addProduct.jsp!jsp页面里有一个表单,提交地址是:product.do?action=save
jsp页面将这个LIST里的内容显示到一个<html:optionCollections>里

“添加”表单显示出来了,但是,如果我提交错误的数据时,先进入ActionForm,它检测到action的值是save,这时就会对输入进行验证
验证不通过!不会进入到ACTION,而是直接转到到input(这里也是addProduct.jsp)!因为没有进入ACTION,所以ACTIONFORM里的LIST自然是NULL
所以,这时,addProduct.jsp里的<html:optionCollections>就拿不到数据了!

不知道大家看明白没有呢?

2.如果连同默认值一起save,那数据库里的默认值不就没用了?
3.将构造改成private后,再用load去取,报错如下:
Exception in thread "main" org.hibernate.HibernateException: CGLIB Enhancement failed: entity.buMen
at org.hibernate.proxy.CGLIBLazyInitializer.getProxy(CGLIBLazyInitializer.java:102)
at org.hibernate.proxy.CGLIBProxyFactory.getProxy(CGLIBProxyFactory.java:47)
at org.hibernate.tuple.AbstractEntityTuplizer.createProxy(AbstractEntityTuplizer.java:372)
at org.hibernate.persister.entity.AbstractEntityPersister.createProxy(AbstractEntityPersister.java:3121)
at org.hibernate.event.def.DefaultLoadEventListener.createProxyIfNecessary(DefaultLoadEventListener.java:232)
at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:173)
at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:87)
at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:862)
at org.hibernate.impl.SessionImpl.load(SessionImpl.java:781)
at org.hibernate.impl.SessionImpl.load(SessionImpl.java:774)
at dao.indexDao.main(indexDao.java:21)
Caused by: java.lang.InstantiationException: entity.buMen$$EnhancerByCGLIB$$1568032d
at java.lang.Class.newInstance0(Unknown Source)
at java.lang.Class.newInstance(Unknown Source)
at org.hibernate.proxy.CGLIBLazyInitializer.getProxy(CGLIBLazyInitializer.java:99)
... 10 more

不过改成get就没有问题了
joejoe1991 2008-03-14
  • 打赏
  • 举报
回复
TO 楼上,显示表单和处理提交的表单我是用一个action做的,是显示表单的时候,不会进行ActionForm里的检测,所以能拿到数据!
而在提交表单的时候,会进行ActionForm的检测,如果检测不通过,则不会进Acion,而是直接forward到刚才的表单页!不过这时Action里的LIST已经被清空,所以无法再次绑定数据!这问这种情况要如何解决!是不是要用两个Action?

第二三你没有回答我的问题!
第二题我问的是如何拿到那个默认值
第三题我是问为什么改成private就报错! 跟有没有数据没关系!数据是存在的
zhsjun 2008-03-14
  • 打赏
  • 举报
回复
1、的确违背了MVC,ActionForm本就存在Request对象中,无需保存,为null,说明验证过程中清空了ActionForm中的值,提交表单的整个过程,必须保证Form是同一个请求中的,否则也会丢失
2、Hibernate产生的是完整的insert语句,所以default丢失
3、get直接得到对象,如果库中没有返回null,load加载时如果数据库中没有抛出一个异常

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧