`
pengjj2
  • 浏览: 136648 次
  • 性别: Icon_minigender_1
  • 来自: 无锡
社区版块
存档分类
最新评论

springMVC+hibernate 嵌套对象时产生的一个问题及解决方法

阅读更多

最近在使用springMVC的时候,产生了这样一个问题。

 

一个Hibernate的Entity,命名为Department.

 

Department 内有一个父节点变量 命名为 depParent;

 

因为是一个外键设置,所以depParent不能在声明时 却 new ,也不能在get 的时候去new

 

所以我在一个JSP页面提交一个这样的form时

 

<form id="addForm" action="addDepartment.htm" method="post" onsubmit="return inputCheck();">
		<table>
			<tr>
				<td>*<spring:message code="departMent_name" />:</td>
				<td><input type="text" id="name" name="name"/></td>
			</tr>
			<tr>
				<td><spring:message code="departMent_beyond" />:</td>
				<td>
					<!-- <input id="parentDep.id" type="hidden" name="parentDep.id" /><input id="parentDep.name" type="text" name="parentDep.name"/> -->
					<input id="parentDep.id" type="text" name="parentDep.id"/>
				</td>
			</tr>
		</table>
	 <div><input type="submit"  value="<spring:message code="submit"/>" /></div>
	</form>

 这两个input都是有值的,然后我后台的controll用Department进行接收

 

 结果老是抛空指针异常。

 

用过struts2的都知道,这种写法是没有什么问题,可以直接进行类型的转换。

 

可是spring不行,我开始还以为是spring mvc不支持这种对象的嵌套的类型转换。

 

但是写propertyEditor也解决不了问题,

 

最后没办法只能跟踪源码,发现spring在做类型转换时,会用反射的方法取调用get方法,结果取出来是null,就会抛异常。

 

所以,最后的解决方案,只能再做一个暂态的变量来给spring进行转换。

 

到此,问题找了个折中的方式解决了。

 

不过从这点来看,spring的类型转换没有strust2的强大和智能,

 

所以如果想采用这种方式,对象类的嵌套对象,在get方法的时候必须能取到一个对象,而不是null。如果没办法new,就用一个新的变量来做一个中转吧。

 

这是我自己学习找到的一些经验,如有什么不足,多指教。

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics