读书人

ognl.OgnlException: source is null

发布时间: 2013-12-11 16:44:13 作者: rapoo

ognl.OgnlException: source is null for getProperty(null, "0")
在使用struts2 提交表单时出现Error setting expression 'extendList[2].extendtypevalue' with value '[Ljava.lang.String;@7ac9a7'
ognl.OgnlException: source is null for getProperty(null, "0")异常,但后台extend.extendtypevalue却有值,而且表单界面也能读出值。

private AssetsList entity;@Overridepublic AssetsList getModel() {return entity;}


<s:iterator value="extendList" id="extend" status="status"><tr><td size="15" cssvalue="%{#extend.extendvalue}"/><s:hidden id="assetId_%{#status.index}" name="extendList[%{#status.index}].assetId" value="%{#extend.assetId}" /><s:hidden id="extendtypevalue_%{#status.index}" name="extendList[%{#status.index}].extendtypevalue" value="%{#extend.extendtypevalue}" /><s:hidden id="extendId_%{#status.index}" name="extendList[%{#status.index}].extendId" value="%{#extend.extendId}" /></td></tr></s:iterator>

原因:Action里没有extendList,extendList是entity里的属性,struts在自动装载时找不到extendList,所以才报null错。那么在表单相应的地方添加entity.就可以来。
修改后
<s:iterator value="entity.extendList" id="extend" status="status"><tr><td size="15" cssvalue="%{#extend.extendvalue}"/><s:hidden id="assetId_%{#status.index}" name="entity.extendList[%{#status.index}].assetId" value="%{#extend.assetId}" /><s:hidden id="extendtypevalue_%{#status.index}" name="entity.extendList[%{#status.index}].extendtypevalue" value="%{#extend.extendtypevalue}" /><s:hidden id="extendId_%{#status.index}" name="entity.extendList[%{#status.index}].extendId" value="%{#extend.extendId}" /></td></tr></s:iterator>

疑问:未修改前,为何读取表单界面时可以读取到extendList和提交表单Action的entity.extendList.extendvalue有修改后的值?
猜测:有可能,struts先在Action查找extendList属性,找不到时再去getModel返回的对象entity查找,找到了再进行装载。但为何在entity里找到了还有包null呢?有待解答。

读书人网 >开源软件

热点推荐